原型模式
意图
部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。
组合的父子类关系比聚合要强:
- 聚合:has-a关系,父类包含子类,子类可以独立于父类存在
- 组合:part-of关系,父类拥有子类,子类不能独立于父类存在
适用性
- 当需要表示对象的层次结构时,如文件系统或组织结构。
- 当希望客户端代码能够以一致的方式处理树形结构中的所有对象时。
应用实例
- JSON 解析,叶子节点;
- 算术表达式:构建一个由操作数、操作符和子表达式组成的树形结构;
类图
透明方式:抽象构件声明了所有子类中的全部方法,但叶子构件没有Add
等方法,却需要实现。
- Component接口:定义了所有对象必须实现的操作。
- Leaf类:实现Component接口,代表树中的叶子节点。
- Composite类:也实现Component接口,并包含其他Component对象的集合。
优缺点
优点:
- 客户端一致地处理单个对象/组合对象,无须关心处理的是单个对象或组合对象,这简化了客户端代码;
- 更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”;
其主要缺点是:
- 设计较复杂,客户端需要花更多时间理清类之间的层次关系;
- 不容易限制容器中的构件;
- 不容易用继承的方法来增加构件的新功能;