
设计模式
Achilles.Wang
勿在浮沙筑高台
展开
-
23种设计模式C++实现UML+源码汇总
设计模式-汇总代码开源仓库地址23种设计模式C++实现C++中的开闭原则使用C++多态功能实现附源码C++基于多态实现依赖颠倒原则附源码C++ 的静态成员变量为什么一定要在类外定义23种设计模式C++源码与UML实现–单例模式中的饿汉模式和懒汉模式c++中的 单例模式(singleton)和双检测锁(Double-Checked Locking)23种设计模式C++源码与UML实现–简单工厂模式23种设计模式C++源码与UML实现–工厂模式23种设计模式C++源码与UML实现–代理模式原创 2020-11-29 22:36:01 · 1720 阅读 · 2 评论 -
23种设计模式C++源码与UML实现--迭代器模式
迭代器模式Iterator模式也叫迭代模式,是行为模式之一,他把对容器种包含的内部对象的访问委让给外部类,使用Iterator按顺序进行遍历访问的设计模式。在使用Iterator模式之前,首先应该明白Iterator模式是用来解决什么问题的。或者说如果不使用Iterator模式会存在什么问题。由容器自己实现顺序遍历。直接在容器类里添加顺序遍历方法让调用者自己实现遍历,直接暴露数据细节给外部以上实现方法存在的问题:方法1,容器承担了太多的功能,一方面需要提供添加删除等本身应有的功能,一方面还需原创 2020-11-29 22:28:22 · 457 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--解释模型
解释模型一些应用提供了内建的脚本或者宏语言来让用户可以定义它们能够在系统中进行的操作。Interpreter模式的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过这个解释器来解释语言中的句子。Interpreter模式提供了这样一个实现解释器的框架。Interpreter模式中,提供了TerminalExpression和NonterminalExpression两种表达式的解释方式,Context类用于为解释过程提供一些附加信息。(例如全局的信息)Context解释原创 2020-11-29 22:26:44 · 394 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--状态模式
状态模式State模式也叫状态模式,是行为模式的一种,State模式允许通过改变对象的内部状态而改变对象的行为,这个对象变现的好像修改了它的类一样。状态模式主要解决的事当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到变现不同的一系列类当中,可以把复杂的判断逻辑简化。角色和职责Context用户对象拥有一个State类型的成员,以标识对象的当前状态State接口或基类封装与Context的特定状态相关的行为ConcreteState接口实现类或子类实现一个与Conte原创 2020-11-29 22:25:34 · 399 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--访问者模式
访问者模式Vistor模式也叫访问者模式,是行为模式之一,它分离对象的数据和行为,使用Vistor模式,可以不修改已有类的情况下,增加新的操作角色和职责。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C7Xbb7nF-1606659788451)(image/image-20201128234814764.png)]抽象访问者(Visitor)角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。具体访问者(ConcreteVisitor)角色:实现原创 2020-11-29 22:23:32 · 420 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--备忘录模式
备忘录模式Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象内部状态,并在需要的时候(undo/roback)回复对象以前的状态。应用场景如果一个对象需要保存状态,并通过undo或者roback等操作回复到通知以前的状态时,可以使用Memmento模式。一个类需要保存它的对象的状态(相当于Originator角色)设计一个类,该类只是用来保存上述对象的状态(相当于Memento角色)需要的时候,Caretaker角色要求Originator返回一个Memento并加以保存u原创 2020-11-29 22:22:17 · 383 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--观察者模式
观察者模式Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。Observer模式提供给关联对象一种同步通信的手段,使得某个对象与依赖它的其他对象之间保持状态同步。角色和职责Suject-被观察者被观察的对象,当需要被观察的状态发生改变时,需要通知队列中所有的观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。ConcreteSubject被观察者的具体实现,包含一些基本的属性状态及其他操作Obs原创 2020-11-29 22:21:15 · 549 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--中介者模式
中介者模式Mediator模式也叫做中介者模式,是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。用一个中介者对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合,而且可以独立地改变它们之间的交互。Mediator抽象中介者中介者类的抽象父类ConcreteMediator具体的中介者类Colleague关联类的抽象父类concreteCo原创 2020-11-29 22:20:03 · 463 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--策略模式
策略模式Strategy模式也叫策略模式,是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交给客户端决定。strategy模式主要用来平滑地处理算法切换。策略模式实现的关键就是将算法的逻辑抽象接口封装到一个类中,在通过委托的方式将具体的算法实现委托给具体的Strategy类来实现Strategy策略(算法)抽象ConcreteStrategy各种策略(算法)的具体实现Context策略的外部封装类,原创 2020-11-29 22:17:57 · 456 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--责任链模式
责任链模式Chain of Responsibility CoR模式,也叫责任链模式或者责任连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像一条链条一样紧密相连,所以被称为责任链模式。例1:比如客户Client客户想完成一个任务,这个任务包括a,b,c,d四个部分。a完成了之后交个b,b完成了之后交给c,c完成了之后交给d。角色和职责Handler处理类的抽象父类concreteHandle具体处理类责任链优缺点优点责任的分原创 2020-11-29 22:15:43 · 414 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--命令模式
命令模式Command模式也叫命令模式,是行为设计模式的一种。Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。在面向对象的程序设计中,一个对象调用另外一个对象,一边情况下调用的过程是,创建目标对象实例;设置调用参数,调用目标对象的方法。但是有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作Command类。整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。调用前后需要对调用参数原创 2020-11-29 22:13:22 · 402 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--模板模式
模板模式Template Method模式也叫模板方法模式,是行为模式之一,它具有把特定的步骤算法中的某些必要的处理委让给抽象方法,通过子类继承抽象方法的不同实现改变整个算法的行为。使用场景具有统一的操作步骤或者操作过程具有不同的操作细节存在多个具有同样操作步骤的应用场景,某些具体的操作细节却各不相同在抽象类中统一操作步骤,并规定好接口,让子类实现接口,这样可以把各个具体的子类实现操作步骤解耦合[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sfms1LDb-原创 2020-11-29 22:09:16 · 637 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--享元模式
享元模式Flyweight模式也叫做享元模式,是构造型模式之一,他通过与其他类似对象共享数据来减少内存占用。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P2lov1Cd-1606658821390)(image/image-20201122102052005.png)]抽象享元模式:所有具有享元类的父亲,规定一些需要实现的公共接口。具体享元角色:抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法享元工厂角色:负责创建和管理享元角色使用场景:以共享的原创 2020-11-29 22:07:38 · 427 阅读 · 0 评论 -
linux系列文章
linux文章汇总VIMbashMakefileubootu-boot编译过程分析linuxLinux系统编程Linux/UNIX网络编程原创 2019-11-09 22:07:43 · 838 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--外观模式
外观模式facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种,facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单界面。这个一致的简单的界面被称为facade。Facade为调用方,定义简单的调用接口Clients调用者,通过facade接口调用提供某功能的内部类群Packages功能提供者,指提供功能的类群适用于:为子系统提供统一一套接口,让子系统更加容易使用。//// Created by andrew on 2020/11/21./原创 2020-11-22 00:07:08 · 403 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--组合模式
组合模式Composite模式也叫做组合模式,是构造型的设计模式之一。通过递归的手段构造树形的对象结构,并可以通过一个对象来访问整个对象树。Component树形结构的节点抽象为所有的对象定义统一的接口(公共属性,行为等的定义)提供管理子节点对象的接口方法[可选]提供管理父节点对象的接口方法Leaf树形结构的叶节点Component的实现子类Composite树形结构的枝节点Component的实现子类适用于 单个对象的使用具有一致性,将对象组合成树形结构表示部分--整原创 2020-11-22 00:04:45 · 455 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--桥接模式
桥接模式Bridge模式,又叫做桥接模式,是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为让类承担不同的责任。它的主要特点是把抽象(Abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及对它们的功能扩展。UML实现如下:clientBridge模式的使用者Abstration抽象类接口(接口或抽象类)维护对行为实现(Implementor)的引用Refined AbstractionAbstr原创 2020-11-17 23:22:56 · 480 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--适配器模式
适配器模式github代码仓库将一个类的接口转换为客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。UML图如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjLtgxnM-1605622397878)(image/image-20201117211106001.png)]适用性你想使用一个已存在的类,而它的接口不符合你的需求。你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作原创 2020-11-17 22:14:10 · 387 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--装饰者模式
装饰者模式github代码仓库装饰者模式(Decorator)又叫包装模式,通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替代方案。装饰模式就是把要添加的功能分别放到单独的类中,并让这个类中包含它要装饰的对象,当需要执行的时候,客户端可以有选择地、按顺序执的使用装饰功能包装的对象。实用性动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责处理那些可以撤销的职责当不能采用子类的方法进行扩充原创 2020-11-17 22:12:55 · 418 阅读 · 2 评论 -
23种设计模式C++源码与UML实现--代理模式
代理模式代理模式是构造幸的设计模式之一,他可以为其他对象提供一种代理,以控制这个对象的访问。所谓代理,是指具有代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。比如淘宝上买衣服,你买的衣服不是淘宝的,是卖衣服的老板在淘宝上开的网点,这个时候淘宝就是代理,卖衣服的就是被代理的人,你们年双十一活动就是代理在交互的过程中进行的特殊处理。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jra原创 2020-11-15 22:23:19 · 482 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--原型模式
原型模式一个复杂对象,具有自我复制功能,统一一套接口。原型模式主要面对的问题是:某些结构复杂的对象的创建工作,由于需求的变化,这些对象进场面对着剧烈的变化,但是他们却拥有比较一致的接口。原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可原创 2020-11-07 11:36:19 · 252 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--建造者模式
建造者模式代码仓库地址:建造者模式Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建模式之一,用来隐藏复合对象的创建过程。他把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。对象的创建:Builder模式是为了对象的创建而设计的模式-创建的是一个复合对象,被创建的对象为一个具有复合属性的复合对象,关注对象创建的各个部分的创建过程,不同工厂(Builder)对产品属性有不同的创建方法。Build原创 2020-10-15 00:20:59 · 426 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--工厂模式
工厂模式工厂方法模式同样属于类的创建型模式,又被称为多态工厂模式。工厂方法的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不在负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处就是使得工厂方法模式可以使系统不再修改具体工厂角色的情况下引进新的产品。模式中包含的角色极其职责抽象工厂角色工厂方法的核心,任何工厂类都必须实现这个接口具体工厂角色具体工厂是抽象工厂的一个实现,负责实例化产品对象。抽象角色工厂方法模原创 2020-10-08 23:32:54 · 566 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--简单工厂模式
简单工程模式简单工厂模式,属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。模式中包含的角色及其职责工厂角色简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂可以被外界直接调用,创建所需的产品对象。抽象角色简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品角色简单工厂模式所创建的具体实例对象说明:产品和工厂之间的关系是依赖,产品和抽象产品之间的关系是继承。依赖:一个类的对象当另外原创 2020-10-08 22:22:35 · 751 阅读 · 0 评论 -
c++中的 单例模式(singleton)和双检测锁(Double-Checked Locking)
懒汉式实现的单例模式上文中给出的懒汉式实现的单例模式,在单线程中使用时完全没有问题的,但是在多线程中使用会存在多次对象多次创建的问题。线程A进入getInstance方法,并进入到if判断,因为现在m_psl是空指针,这时刚好线程A时间片用完,开始切换到线程B,线程B也调用getInstance方法创建了一个对象线程B时间片用完,切换到线程A,这时线程A从if判断成功之后的下不开始,又创建了一遍对象,这时已经两次创建对象了为了解决这个问题需要使用双检测,详情可参考C++ and the Per原创 2020-10-08 19:31:09 · 3127 阅读 · 0 评论 -
23种设计模式C++源码与UML实现--单例模式中的饿汉模式和懒汉模式
单例模式单例模式是一种对象创建模式,使用单例模式,可以保证为一个类生成唯一的实例对象。也就是说在这个程序空间该类只有一个实例对象。GoF对单例的定义:保证一个类、只有一个实例存在,同时提供对该实例加以访问的全局访问方法。单例模式UML图单例模式的目的就是保证一个类只有一个实例,并提供一个访问它的全局访问点。使用单例模式的原因在应用系统开发中,我们常常有以下需求:多个线程公用一个socket资源,或者操作同一个对象在整个程序空间需要使用全局变量,共享资源大规模系统中,为了性能考虑,需要节原创 2020-10-08 14:03:50 · 677 阅读 · 0 评论 -
C++ 的静态成员变量为什么一定要在类外定义
C++ 的静态成员变量为什么一定要在类外定义函数如下,在C++中声明静态成员变量的时候,在类中只是进行了声明,并没有实际的申请出指针的内存,真正的内存是定义初始化的时候才会进行内存的申请,因此,又因为static类型的变量都是随着类的,因此不能随着对象的创建而申请内存,所以需要单独的进行类外定义,在定义的时候C++编译器会申请内存给静态指针。#include <iostream>using namespace std;class Singleton{private: Si原创 2020-10-08 00:20:26 · 3306 阅读 · 1 评论 -
C++基于多态实现依赖颠倒原则附源码
依赖颠倒原则关于多态的实现原理以及实例见前几天更新的C++多态一文:C++多态传统的过程式设计倾向于使用高层的模块依赖低层次的模块,抽象层依赖于具体层没有使用依赖颠倒之前,上层业务逻辑依赖底层业务逻辑依赖颠倒原则使用了依赖颠倒之后,上层业务逻辑和底层模块都依赖于抽象层,代码复杂了,但是系统易于维护了依赖颠倒的实现也是基于多态的基础之上,,具体的Cpp代码实现如下:#include <iostream>using namespace std;// 让computer框架和原创 2020-10-07 19:42:02 · 1371 阅读 · 4 评论 -
C++中的开闭原则使用C++多态功能实现附源码
开闭原则使用开闭原则之前一个银行柜员会将所有的工作都操作一遍,这样会大大降低办事的效率,而且银行的业务不适合扩展,没扩展一项业务就要培训所有的业务员。改为使用开闭原则之后,每个银行业务员只负责一项业务即可,这样做增加了系统的复杂性,但是想要新增业务只需要增加个人员,培训一个人新技能即可。也即是增加系统复杂性,但是原有的基础不变的情况下就可实现对业务的扩展。具体的CPP代码如下:#include <iostream>using namespace std;// 在使用开闭原则之前原创 2020-10-07 13:14:43 · 3617 阅读 · 16 评论 -
23种设计模式C++实现
设计模式设计模式前言模式:在一定环境中解决某一问题的方案,包括三个基本元素-问题,解决方案和环境。即在一定环境下,用固定的套路解决问题。创建型模式创建型模式用来处理对象的创建过程,主要包含以下 5 种设计模式:工厂方法模式(Factory Method Pattern)的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。抽象工厂模式(Abstract Factory Pattern)的意图是提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类。建造者模式(Buil原创 2020-10-06 23:53:47 · 1349 阅读 · 0 评论