原文链接:
设计模式C++学习笔记之五(Factory Method工厂方法模式)
设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
设计模式C++学习笔记之九(Template Method模板方法模式)
设计模式C++学习笔记之十七(Chain of Responsibility责任链模式)
个人理解:
1、策略模式:Context包含抽象策略类,实例化Context时传入不同策略实现类,则在接口调用时,调用不同策略类。多态
2、代理模式:看着这个代理模式,真让人头晕,简直和策略模式没区别,如果非要和策略模式比的话,唯一的区别就是Context类也继承了抽象策略类,代理模式的代理也必须实现抽象接口的类的函数,因此,代理清楚的知道被代理的人是干什么的。所以代理人可以成为中介。
3、单例模式:在系统中只允许产生这个类的一个实例。
4、多例模式:有限个单例,多类单例
5、工厂方法模式:定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。工厂方法属于创建型模式。(简单工程模式可以理解为工厂方法模式的特例)
6、门面模式:为子系统中的一组接口提供一个一致的界面,将复杂逻辑封装起来,对外只有一个简单的接口,感觉和上述几种模式还有很大区别,就功能上来看,好像只是为了把复杂逻辑封装,而提供给客户一个统一的接口。
7、抽象工厂模式:工厂模式适用于产品种类不多的情况,而抽象工厂模式就是解决这一类问题而产生的,抽象工厂模式适用于横向和纵向都能分类的元素,主要解决产品族问题
8、适配器模式:Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。对象适配:继承系统内部接口类并声明要适配的接口类对象;类适配:继承系统内部接口类和要适配的接口类。
9、模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,这种模式的逻辑基本是固定的,而把不同的实现封装在子类中,并且基类中的共有调用接口不允许被覆盖,模板方法属于行为型模式
10、Builder建造者模式:建造者模式和抽象工厂非常类似。建造者更重视产品建造时的逻辑顺序,而抽象工厂更重视生产出不同型号的产品,抽象工厂不关心顺序
11、Bridge桥接模式:属于结构型模式,这个模式意在提供一个桥梁类,包含目标抽象类,实例化抽象桥梁类,在使用中实例化的桥梁类传入不同的目标实例类对象,则表现出不同的行为。
12、Command命令模式:将一个请求封装为一个对象,而这个对象内部通过操作类实现了一定的功能,请求和操作均是有抽象基类,命令对象是由命令执行者来操作的。
13、Decorator装饰模式:属于行为型模式,装饰类必然有一个父类指针作为成员变量,这个父类指针可以指向被装饰类,也可以指向装饰类。这样多个装饰类一起就可以组成复杂的装饰结构。14、Iterator迭代器模式:暂时没看出来有什么好的,可能个人工作和学习中没有遇到类似的处理情况吧。
15、Composite组合模式:组合模式有透明组合模式和安全组合模式,透明组合模式更抽象,不过容易出现逻辑问题。看到这个组合模式,是不是有点儿眼熟,这个和装饰模式很像,不过既然是两种模式,那当然是有区别的,共同点:同一个基类,组合模式中的分支可以看做装饰模式中的装饰类,组合模式中的叶子可以看做装饰模式中的被装饰类;区别:组合模式的分支可以包含多个分支或者叶子,装饰模式中的装饰类只能包含一个装饰类或者被装饰类,装饰类一般都是多个,而分支是一种(也可以时多种)。装饰模式的重点在于每个装饰类都实现了一定的功能,多个装饰类来共同装饰一个被装饰对象,组合模式使得用户对单个对象和组合的使用具有一致性。
16、Observer观察者模式:属于行为型模式,对象间的一种一对多的依赖关系,被观察对象保留观察者的指针集,当被观察者需要通知观察者时,遍历观察者集合,通知观察者自己发送变化,这个模式理解起来比较容易。
17、Chain of Responsibility责任链模式:顾名思义,请求的处理是一个队列,当前模块处理不了的时候交给下个模块,知道找到能处理该请求的模块,责任链模式说白了就像一个链表似的,责任处理抽象类指针代表着每个节点,指针指向责任处理实际类,这个模式也比较简单。
18、Visitor访问者模式:属于行为型模式,访问者模式是由访问者主动发出的动作,观察者模式是由被观察对象发出的变化动作,这两种模式存在的情景不一样。访问者模式中:A接受B的访问,B主动的执行访问动作,过程:A调用接收访问方法,参数为B的引用或者指针,A的方法内部在通过以参数传递进来的B对象,调用B的访问动作函数(访问要干的事情),并把自己当做参数传递到B对象的函数中,可能有点儿绕口,我自己都读了好几遍。
19、State状态模式:属于行为型模式,每个状态封装到一个模块,上下文负责维护当前状态,感觉似乎用的比较少。
为了更好的供大家理解,给出一个uml类图关系
【箭泛化关系】:是一种继承关系,表示一般与特殊的关系,【箭头指向】:带三角箭头的实线,箭头指向父类
【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现,【箭头指向】:带三角箭头的虚线,箭头指向接口
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法,【箭头及指向】:带普通箭头的实心线,指向被拥有者
【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在,聚合关系是关联关系的一种,是强的关联关系,【箭头及指向】:带空心菱形的实心线,菱形指向整体
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系,【箭头及指向】:带实心菱形的实线,菱形指向整体
【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,【箭头及指向】:带箭头的虚线,指向被使用者