跳转至

原型模式

意图

部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。

组合的父子类关系比聚合要强:

  • 聚合:has-a关系,父类包含子类,子类可以独立于父类存在
  • 组合:part-of关系,父类拥有子类,子类不能独立于父类存在

适用性

  • 当需要表示对象的层次结构时,如文件系统或组织结构。
  • 当希望客户端代码能够以一致的方式处理树形结构中的所有对象时。

应用实例

  • JSON 解析,叶子节点;
  • 算术表达式:构建一个由操作数、操作符和子表达式组成的树形结构;

类图

透明方式:抽象构件声明了所有子类中的全部方法,但叶子构件没有Add等方法,却需要实现。

  • Component接口:定义了所有对象必须实现的操作。
  • Leaf类:实现Component接口,代表树中的叶子节点。
  • Composite类:也实现Component接口,并包含其他Component对象的集合。

img

优缺点

优点:

  • 客户端一致地处理单个对象/组合对象,无须关心处理的是单个对象或组合对象,这简化了客户端代码;
  • 更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”;  

其主要缺点是:

  • 设计较复杂,客户端需要花更多时间理清类之间的层次关系;
  • 不容易限制容器中的构件;
  • 不容易用继承的方法来增加构件的新功能;