设计模式总结02–结构型模式
1 适配器模式
1.1 设计意图
将一组接口转为期望的另一种接口,将不兼容的接口变为可兼容
1.2 解决问题
解决接口兼容的问题
1.3 优缺点
优点
组合没有关联的类、提供类的复用、灵活性高
缺点
- 设计原则:
- 子类膨胀:
- 设计水平:
- 性能方面:
- 代码可读:没有关联的类之间的调用容易产生语义变换,不好理解。
- 场景局限:
2 桥接模式
2.1 设计意图
将抽象和实现分离,
2.2 解决问题
在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。如果用继承,类数量将是M乘以N的暴增。
2.3 优缺点
优点
抽象和实现分离、自由组合扩展能力强、灵活性高
缺点
- 设计原则:
- 子类膨胀:
- 设计水平:对高层次抽象的要求比较高
- 性能方面:
- 代码可读:
- 场景局限:
3 外观模式
3.1 设计意图
为子系统中的一组接口提供一个一致的界面;外观模式定义了一个高层接口,将子系统的接口进行整合使之简洁易用。
3.2 解决问题
降低子系统接口的复杂度。
3.3 优缺点
优点
满足最小知道、安全度高、灵活性高
缺点
- 设计原则:子系统改了,外观接口也需要改;不满足开闭原则
- 子类膨胀:
- 设计水平:
- 性能方面:
- 代码可读:
- 场景局限:
4 代理模式
4.1 设计意图
为其他对象提供一种代理以控制对这个对象的访问。
4.2 解决问题
隐藏直接访问的业务、技术细节;
4.3 优缺点
优点
单一职责、高扩展、智能化、隐藏细节
缺点
- 设计原则:
- 子类膨胀:
- 设计水平:
- 性能方面:代理太多,影响性能
- 代码可读:
- 场景局限:
5 组合模式
5.1 设计意图
将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
5.2 解决问题
以树型结构模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
5.3 优缺点
优点
使用简单、节点自由增加
缺点
- 设计原则:实现类聚合实现类,不符合依赖倒置。
- 子类膨胀:
- 设计水平:
- 性能方面:
- 代码可读:
- 场景局限:
6 装饰模式
6.1 设计意图
动态给一个对象添加额外功能、相比扩展子类更加灵活
6.2 解决问题
扩展子类方式会造成子类膨胀,且无法在运行期动态添加或移除功能
6.3 优缺点
优点
装饰和被装饰对象相互解耦、灵活度高
缺点
- 设计原则:
- 子类膨胀:
- 设计水平:
- 性能方面:
- 代码可读:多次嵌套,复杂度高
- 场景局限:
7 享元模式
7.1 设计意图
运用共享技术有效地支持大量细粒度对象的共享。
7.2 解决问题
解决大量细粒度对象的多副本,造成内存消耗
7.3 优缺点
优点
减少对象创建、降低副本数量、提升内存使用效率
缺点
- 设计原则:
- 子类膨胀:
- 设计水平:现实中一个对象往往不可能绝对可共享,需要抽离出可共享和不可共享的部分进行分离,设计要求高。
- 性能方面:
- 代码可读:
- 场景局限: