为什么使用composite模式
意图:将对象组合成树形结构以表示“部分---整体”的层次结构,本模式使得用户对单个对象和组合对象的使用具有一致性。
呵呵,说的很明白了 为了简化 使用单个对象与组合对象时的复杂性。看了它的意图应该可以理解不少了。
为什么使用?
1:在开发中,客户经常要对单个对象与组合对象 区别对待,这样就导致客户部分的代码有复杂性的臭味。
2:组合对象变化(如再组合一个单个对象)导致客户部分的代码发生变化,怎么办?“抽象封装变化”还记的吗?
用了这招就可以使客户只依赖于抽象而不是实现,对单个对象和组合对象的使用具有一致性,而且还面向接口编程。
总结:
1:本模式采用树形结构来实现对象容器问题,这样就可以将“一对N”的关系转换为“一对一”的关系,使得客户代码可以一致地处理对象和对象容器,无需担心处理的是单个对象还是一组对象。
2:将“客户代码与复杂对象容器结构”解耦是本模式的核心思想,解耦之后就只与抽象接口发生依赖关系。
3:是将“Add和remove等和对象容器相关的方法”定义在“表示抽象对象的component类”中,还是将其定义在“表示 对象容器的composite类“中,是一个关乎”透明性“和”安全性“的两难问题,需要仔细权衡。有可能违背 职责单一 原则, 但这又是必须付出的代价。
4:本模式在具体实现中,可以让父对象的子对象反向追溯,如果父对象有频繁的遍历需求,可使用缓存技巧来改善效率。
5:本模式在理解上应该比较容易,但实现的时候可能需要费不少心思,“透明”与“安全”需要仔细权衡

浙公网安备 33010602011771号