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

适用场景

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

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

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

主要优点:

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

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

 

其结构如图所示:


结构解析

组合结构给人感觉就是类似于树的概念,在树中,有些节点是终极节点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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值