老生常谈的问题,网上一搜一大把,但是不写下来,依然经常出现理解上的偏差,包括在实际的开发使用中,一些模式经常写串,因此将个人的一些理解写下来,争取做到言简意赅,能一句话总结的,绝不啰嗦第二句。
先上一个设计模式的整体分类图
创造型模式主要解决类的实例化过程。
结构型模式主要解决类和方法的组合问题。
行为型模式主要解决类的交互、职责问题。
1,代理模式
UML实例图:
代理模式的关键点在于封装,代理封装了单个功能类的实现,减少系统之间的强耦合,最常见的例子是RPC调用。
2,适配器模式
适配器的关键点在于转换,适配层封装了从一种格式到另外一种格式的转换逻辑。
3,装饰模式
装饰模式关键点在于功能扩展,在保证核心逻辑不变的情况下,动态添加一些扩展属性。
4,门面模式
门面模式的关键点在于聚合,门面封装了对多个子系统的聚合访问控制。
5,策略工厂
UML图实例:
策略工厂代表多个相似策略的聚合,通过统一的接口,封装了多个接口的变化。
常用对比一栏:
代理 VS 适配:
相同点:封装了一个类。
区别:代理封装了一个类的访问控制,适配转换类的以适配其他接口
适配 VS 装饰
相同点:都扩展了类的功能。
区别:适配模式转换之后,核心类发生了变化,装饰模式核心类不变,是主功能的扩展。
适配VS门面
共同点:转换了类的输出格式
区别:适配仅针对一个类的转换,门面模式是针对多个类的聚合。
门面VS策略工厂
共同点:封装了多个类的实现
区别:策略工厂是针对同一接口(算法)的封装,门面是针对多个接口的封装。
参考:https://design-patterns.readthedocs.io/zh_CN/latest/index.html