1. 特点
(1)将对象以树型结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。
2. 两种代码架构(1)透明架构
针对树型结构中所有的节点都有可能是树枝,比如论坛中的帖子。
定义Component接口(也可用抽象类,视情况而定),树枝Composite和树叶Leaf都实现该接口,聚集管理定义在Component接口中。
优点:增加新节点很容易。树枝和树叶接口完全一致,使用者可以同等对待。
缺点:使用者有可能错误地在树叶上调用聚集方法,运行时报错。
(2)安全架构针对树型结构中有的节点是树叶,比如文件系统(目录是树枝,文件是树叶)。
定义Component接口(也可用抽象类,视情况而定),树枝Composite和树叶Leaf都实现该接口,聚集管理定义在树枝中。
优点:增加新节点很容易。避免使用者错误地在树叶上调用聚集方法,编译时报错。
缺点:树枝和树叶接口不完全一致,使用者需要区别对待,即使用前要判断该节点是树枝还是树叶。
3. 进一步思考,如何实现遍历父节点(从下向上)?(1)在字节点中定义父节点的引用。(2)增加删除字节点时,修改父节点的引用。
4. Java中对合成模式的应用
(1)AWT库中的Container类和Component类。
Container类继承Component类,Component类关联Container类。
其它构件如Button、Checkbox也继承Component类。聚集管理定义在Container类中,是安全架构地实现方式。
5. 典型应用场景(1)文件系统。(根目录、子目录、文件)
(2)论坛中的帖子。(根帖、回帖、回帖的回帖)(3)绘图。(复杂的图形都是由简单的图形合成而成的)
参考文献:
1. 《设计模式》 板桥里人
2. 《Java与模式》 阎宏
没有评论:
发表评论