Composite模式(组合模式 结构型)

适用场景

1)在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,客户端可以一致地对待它们。

2)在一个使用面向对象语言开发的系统中需要处理一个树形结构。

3)在一个系统中能够分离出叶子对象和容器对象,而且它们的类型不固定,需要增加一些新的类型。

主要优点:

1)可以清楚地定义分层次的复杂对象,让客户端忽略了层次的差异,方便对整个层次结构进行控制。

2)在组合模式中添加新的容器构建和叶子构建都很方便,无需对现有类库进行任何修改,符合“开闭原则”。

 

其结构如图所示:

Composite模式(组合模式 结构型)_第1张图片

结构解析

组合结构给人感觉就是类似于树的概念,在树中,有些节点是终极节点Leaf:它不可挂接其它节点;而有些则是容器节点Composite:它下面可挂容器和终极节点Leaf。我们可以类比于操作系统的文件结构。文件夹就是Composite,而文件则是Leaf。

作为客户端,如果在处理容器Composite和终极节点Leaf时,太过注重类型的话,则在创建的过程中,会出现大量的if判断语句,且程序的扩展性、开闭原则都处于不利的状态,简而言之就是太过程化了。

Composite模式的出现就是利用OOP的思想,将容器、终极节点等进行抽象,而后通过多态的手法,实现对树或者其它客户端不需要对层次太注重的结构进行操作。

Composite模式有两种实现方法,一种为透明组合模式,另一种为安全组合模式。在参考资料时,找到一份对Composite模式所得很详细的资料,因此接下去就附上网址供大家参照: https://quanke.gitbooks.io/design-pattern-java/content/%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F-Composite%20Pattern.html




你可能感兴趣的:(设计模式)