大佬教程收集整理的这篇文章主要介绍了23种设计模式之组合模式,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
定义: 将对象组合成树形结构以表示 "部分-整体" 的层次结构,使得用户对单个对象和组合对象的使用具有一致性.
通俗的说,就是实现了树形结构
通用类图如下:
title="23种设计模式之组合模式" alt="23种设计模式之组合模式" src="https://cn.js-code.com/res/2019/01-10/21/b864f89621b406f95afc962dfe5d01e3.jpg" >
其中的三个角色如下:
抽象构件角色代码:
title="23种设计模式之组合模式" alt="23种设计模式之组合模式" src="https://cn.js-code.com/res/2019/01-10/21/0ecf87cb5f8641fbf8945d9b138ef2e0.jpg" >
树枝构件代码:
title="23种设计模式之组合模式" alt="23种设计模式之组合模式" src="https://cn.js-code.com/res/2019/01-10/21/43df8ef901838cdcce41675f7c43f936.jpg" >
叶子构件代码:
title="23种设计模式之组合模式" alt="23种设计模式之组合模式" src="https://cn.js-code.com/res/2019/01-10/21/b9fdf5cf38fa8b563fb2caefd1a15471.jpg" >
场景类代码:
title="23种设计模式之组合模式" alt="23种设计模式之组合模式" src="https://cn.js-code.com/res/2019/01-10/21/17d2323ba0123aa1aef942d23705e694.jpg" >
组合模式的优点:
组合模式的缺点:
我们在使用的时候,树叶和树枝的定义直接使用了实现类,这在面向接口编程上是很不恰当的,与依赖倒置原则冲突,限制了接口的影响范围
组合模式的使用场景:
只要是树形结构,就要考虑使用组合模式,只要是要体现局部和整体的关系的时候,而且这种关系还可能比较深,应该考虑组合模式
1.真实的组合模式
在上边的例子中,Clien 中进行了树的组装,而在实际项目中,数据通常在数据库中,我们直接从数据库将数据读取放到树上就可以了
2.透明的组合模式
组合模式有两种实现: 透明模式和安全模式. 上面的实现就是安全模式,透明模式的类图如下:
title="23种设计模式之组合模式" alt="23种设计模式之组合模式" src="https://cn.js-code.com/res/2019/01-10/21/40ecf85c4ead33bf76479d15bd080421.jpg" >
透明模式就是把用来组合使用的方法放到抽象类中,通过判断getChild() 的返回值确定是叶子节点还是树枝节点,在 Leaf 中实现 add等方法要抛出异常,如果处理不当,会在运行期出现问题
在透明模式下,遍历整个树形结构是比较容易的,不用进行强制类型转换.
透明模式的好处就是它基本遵循了依赖倒置原则,方便系统扩展
3.组合模式的遍历
有的时候不光要从上向下遍历,还要从下往上遍历,也就是通过子节点要找到他的父节点,这时就要在抽象构件角色中添加 getParent 方法,也就是在每个节点都增加一个父节点对象
以上是大佬教程为你收集整理的23种设计模式之组合模式全部内容,希望文章能够帮你解决23种设计模式之组合模式所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。