这篇是对刘伟《设计模式》的总结,GoF23总共分为创建型、结构型、行为型三类。
UML:抽象为实,接口为虚
创建型 -- 5
(1)简单工厂模式、工厂模式、抽象工厂模式的区别
模式名称 | 理解 |
简单工厂模式 | 工厂类是核心类,包含复杂的逻辑结构 |
工厂模式 | 一种抽象工厂只能生产一种产品 |
抽象工厂模式 | 产品等级结构 |
(2)工厂方法模式引入了抽象的工厂类,而将具体产品的创建过程封装在抽象工厂类的子类,也就是具体工厂类中。
(3)聚合和组合的区别 -- 前聚空后主实
聚合 -- 注入 组合 -- 生命周期
两者都表示一个整体与部分的关系
(4)建造者 -- 指挥者
(5)原型模式 -- 深克隆/浅克隆 -- clone()函数
(6)单例模式的三要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
结构型 -- 7
(1)结构型模式关注如何将现有类或现有对象组织在一起形成更加强大的结构
(2)合成复用原则->在系统中应当尽量使用关联关系来替代继承关系
(3)extend 继承 -- super -- 具体类
extend 抽象类
implements 接口实现
(4)适配器模式
(5)桥接模式 -- 桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。
(6)组合模式 -- 形成树形结构 -- P186
容器构件类既有继承的关系,又有组合关系
(7)装饰模式 -- 一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承。
final https://www.cnblogs.com/xiaoxi/p/6392154.html
(8)外观模式 -- 提供了统一的入口 -- 外观类和子系统之间的关系
P225 外观模式的注意点:
1. 不要试图通过外观类为子系统增加新的行为
2. 符合迪米特法则
(9)享元模式
存在大量相同或相似的对象 -- 通过共享技术实现相同或相似的细粒度对象的复用
(10)代理模式
通过一个代理对象来间接访问某些直接访问会出错误的对象
行为型 -- 11
行为型模式关注系统中对象之间的相互交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责。
(1)职责链模式
P265 假条审批 -- 将请求沿着链进行传递
(2)命令模式
P278 电视遥控器 遥控器 -> 按钮 -> 电视机
将请求发送者与请求接收者解耦,请求发送者通过命令对象来间接引用接收者。
(3)解释器模式
用于描述如何构成一个简单的语言解释器,主要应用于使用面向对象语言开发的编译器和解释器设计。
(4)迭代器模式
用于对一个聚合对象进行遍历 聚合对象 -- 列表(list)/ 集合(set)
P309
(5)中介者模式
联合国 / QQ群
可以将系统的网状结构转换为以中介者为中心的星状结构,中介者承担中转和协调的作用
(6)备忘录模式
软件系统的“月光宝盒” -- 撤销操作
(7)观察者模式
P350 定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
观察目标不需要了解其具体观察者,只需要知道它们都有一个共同的接口即可。
(8)状态模式
P372
(9)策略模式
用于算法的自由切换和扩展
(10)模板方法模式
定义一个操作中算法的骨架,而将一些步骤延迟到子类中。
(11)访问者模式
P414
参考资料:
(1)史上最全设计模式导学目录(完整版):https://blog.youkuaiyun.com/lovelion/article/details/17517213
(2)课件和源码:https://download.youkuaiyun.com/download/wjf_1997/10504489