一. 创建型设计模式
1.简单工厂:
简介:简单工厂为用户提供了一个实例,而隐藏了具体的实例化逻辑。一维:实例
使用时机:当你创建一个对象,并非简单拷贝赋值,牵扯很多其他逻辑,应该把它放到一个专门的工厂。在C++中就是将new语句的逻辑对象到一个实例中,扔到一个统一的静态函数中。
2.工厂方法:
简介:一种将实例逻辑委托给子类的方法。二维:实例加方法
使用时机:当一个类中又一些通用的处理,但要等到运行时才决定用哪个子类的实现。
3.抽象工厂:
简介:工厂们的工厂,一家管理各自独立却又依赖的一批工厂,而不关心各自的细节。 三维:实例加方法加依赖关系。
使用时机:当遇到不那么简单的创建逻辑,伴随着与之相关的依赖关系。
4.建造者(生成器):
简介:允许你创建不同风格的对象,同时避免构造器污染。
使用时机:构造函数有很多参数的时候。
本质:构造函数的参数列表方法化
5.原型
简介:通过克隆,基于已有的对象来创建对象
使用时机:当需要的对象,与已存在的对象非常相似,或者创建过程比克隆一下更费时。
本质:拷贝构造函数跟拷贝赋值函数。
6单例
简介:确保一个特定类的一个对象,只能创建一次。
本质:getInstance
二:结构型设计模式
1.适配器
简介:包装一个对象,让本不兼容其他类的该对象变的兼容。
本质:很多问题都可以用在中间加一层的方式解决。
2.桥接
简介:优先考虑组合而非继承,将实现细节从层次结构中,剥离并独立成另一套层次结构
本质:桥接模式本质上就是一种拆分。
3.组合
简介:组合模式让客户用统一的方式对待每个对立的对象
本质:多态特性的体现。容器存储的接口类型。
4.装饰
简介:装饰模式将对象包装在装饰类对象中,从而在运行时动态改变该对象的行为
本质:依赖父类接口
5.外观
简介:外观模式为复杂的子系统提供了简单的接口。
本质:封装
6.享元
简介:通常以最小的存储用量或者计算成本为代价,共享给尽可能多的相似对象
本质:享元模式的本质就是最基本的缓存思想,无论是计算机体系结构中的cache还是操作系统中的page table,都是这种思想的体现。在程序设计中,实现这一思想,最常用的数据结构就是哈希表,key存在了,直接取走,不存在,创建一个。以此节省重复的创建与冗余的空间。
7.代理
简介:使用代理模式,一个类会表现出另一个类的功能
本质:加一层,兼容
三.行为型设计模式
1.责任链
简介:它有助于建立一条对象链,请求会从一端开始,依次访问对象,直到找到合适的处理程序。
本质:对象的单链表实现 + 对单链表的迭代。
2.命令
简介:允许你将操作封装在对象中,核心思想分离客户与接收者
本质:对消息协议的一种抽象,用的手法是回调。
3.迭代器
简介:它呈现 了一种访问对象元素,却不暴露底层方法的方式
本质:c++的迭代器
4.中介者
简介:中介者模式增加了一个第三方对象来控制两个对象间的交互
本质:也说是对消息协议的一种抽象,并同样借用了回调的手段。
5.备忘录
简介:备忘录模式会抓取并存储对象的当前状态,之后可便捷的恢复出来
本质:备忘录模式,说白了就是对缓存这个行为的对象化,我们通常享缓存一个状态,会把这个状态存到容器中(哈希表,map等),并用某个key(如时间戳)来标定,但当你要实现的,是一个颇具规模,多种状态缓存,以及各种“存-取”穿插的时候,将状态抽象成一个对象,就显得十分必要了。
6.观察者
简介:定义对象间的依赖关系,以至于一个对象的状态改变,依赖它的对象们都会收到通知。
本质:又称为发布-订阅模式,本质是注入+回调,订阅是注入的时机,发布是回调的时机,观察是注入的时机,通知是回调的时机。
7.访问者
简介:访问者模式允许你为对象们增加更多的操作,却不必修改它们
本质:本质依然是注入-回调模式
8.策略
简介:策略模式允许你根据实际情况切换算法或策略
本质:依然是注入+多态
9.状态
简介:改变状态的同时,也改变类的行为
本质:依然是注入+多态
10.模板方法
简介:模板方法定义了如何执行某种算法的框架,但将具体实现延迟到子类。
本质:多态的集中体现
参考文档:https://segmentfault.com/a/1190000010706695