设计模式总结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 优缺点

优点

减少对象创建、降低副本数量、提升内存使用效率

缺点

  • 设计原则:
  • 子类膨胀:
  • 设计水平:现实中一个对象往往不可能绝对可共享,需要抽离出可共享和不可共享的部分进行分离,设计要求高。
  • 性能方面:
  • 代码可读:
  • 场景局限:

猜你喜欢

转载自blog.csdn.net/fs3296/article/details/108659498