本文主要是介绍3.5 《硬啃设计模式》 第14章 超酷绘图软件 - 组合模式(Composite Pattern),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
某绘图 软件 ,能绘制点、线、面等简单几何形体。同时也能将这些简单形体组合成更复杂的图形。
以下是该软件的设计:
该设计看上去不错,容器可以不管被“包容”的具体是什么东西。
但组后以后可不可以再组合呢?Office软件可以做到将任意图形组合,并且组合后可以再组合,以上这个设计恐怕做不到吧?
我们用组合模式来改善一下这个设计:
说明:
1.Container依然是包含Element,但同时Container继承了Element,这表明Container可以包含Container,这样就可以组合后可以再组合了。
2.Element定义了集合的常见方法,可根据实际需要调整。
3.Container的Draw()方法并不会画自己,而是遍历自己的儿子,调用儿子的Draw()方法。
组合以后再组合,其实就是组织成一棵对象树,这棵树有很多节点,有些节点还包含子节点,组合模式可以帮助我们组织这样的一棵树。
看看组合模式的 类图 :
说明:
1.这棵对象树中的所有节点,都被抽象成Component。
2.如果节点能包含节点,这些节点就是Container。
3.如果节点不能再包含节点,这些节点就是Leaf。
4.Component定义了Container和Leaf的通用方法,实际上Container和Leaf是有差异的,为了保持一致性,Leaf中不可避免地有一些无用方法(如Add,GetChild,Remove),这是组合模式的一个缺点。
作者:张传波
创新工场创业课堂(敏捷课程)讲师
软件研发管理资深顾问
CMMI首席专家
《火球——UML大战需求分析》作者
《硬啃设计模式》作者
www.umlonline.org创办人
这篇关于3.5 《硬啃设计模式》 第14章 超酷绘图软件 - 组合模式(Composite Pattern)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!