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

本文介绍了组合模式的概念及其在软件开发中的应用。通过定义统一接口,组合模式允许用户一致地操作单个对象和对象组合,适用于处理包含子对象的树形结构。文章还探讨了安全组合模式与透明组合模式的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在开发过程中经常使用到树形结构,它分为叶子节点和和分支节点两种,客户对象在使用这两种对象时候经常要对它们加以区别,增加了代码的复杂度,也非常容易出错。组合模式为这两种类型提供了统一的接口,可以让我们像操作叶子节点那样方便地操作分支节点。 

======================================================================================================================================

关于组合模式,GoF 给出的定义是:

Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.

将对象组合成树形结构来表现部分-整体的层次关系。组合使得客户一致地使用单个对象和组合对象。

要使客户程序对分支节点和叶子节点进行一样的操作,那么它们外形必须一样,即得有相同的接口隐藏具体实现,下面我们先从 UML 静态类图入手。 


======================================================================================================================================

安全的组合模式 


======================================================================================================================================

透明的组合模式 


======================================================================================================================================

安全的组合模式VS透明的组合模式

安全的组合模式编译时就可以发现为叶子节点执行add等无意义的管理子节点的操作,但造成了LeafComposite接口不一致,损失了透明性。透明的组合模式只有在运行时才可能(如果不忽略的这些无意义调用的话)暴露错误地使用叶子节点的操作,牺牲了安全性,具有良好的透明性。这二者各有优缺点,读者在实际编程中需要自己权衡来决定应该使用哪种方式。

======================================================================================================================================

android中的例子



--------------以上摘自《漫谈设计式》+ http://www.cnblogs.com/qianxudetianxia/archive/2011/07/29/2121488.html


总结:

当我们需要处理的对象本身包含与自身属性相同的子对象时,我们就应该使用组合模式。如一个View 可以包含其他子View ,一个公司可以包含分公司,一个数组可以包含子数组,像这种类型的对象,形成了树形结构,我们定义统一的接口就可以方便地操作对象及对象组合。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值