3.5 《硬啃设计模式》 第14章 超酷绘图软件 - 组合模式(Composite Pattern)

某绘图 软件 ,能绘制点、线、面等简单几何形体。
同时也能将这些简单形体组合成更复杂的图形。

以下是该软件的设计:

3.5 《硬啃设计模式》 第14章 超酷绘图软件 - 组合模式(Composite Pattern)_第1张图片  

该设计看上去不错,容器可以不管被“包容”的具体是什么东西。
但组后以后可不可以再组合呢?Office软件可以做到将任意图形组合,并且组合后可以再组合,以上这个设计恐怕做不到吧?

我们用组合模式来改善一下这个设计:

3.5 《硬啃设计模式》 第14章 超酷绘图软件 - 组合模式(Composite Pattern)_第2张图片  

说明:
1.Container依然是包含Element,但同时Container继承了Element,这表明Container可以包含Container,这样就可以组合后可以再组合了。
2.Element定义了集合的常见方法,可根据实际需要调整。
3.Container的Draw()方法并不会画自己,而是遍历自己的儿子,调用儿子的Draw()方法。
组合以后再组合,其实就是组织成一棵对象树,这棵树有很多节点,有些节点还包含子节点,组合模式可以帮助我们组织这样的一棵树。

看看组合模式的 类图

3.5 《硬啃设计模式》 第14章 超酷绘图软件 - 组合模式(Composite Pattern)_第3张图片  

说明:
1.这棵对象树中的所有节点,都被抽象成Component。
2.如果节点能包含节点,这些节点就是Container。
3.如果节点不能再包含节点,这些节点就是Leaf。

4.Component定义了Container和Leaf的通用方法,实际上Container和Leaf是有差异的,为了保持一致性,Leaf中不可避免地有一些无用方法(如Add,GetChild,Remove),这是组合模式的一个缺点。




请看下一文……
 
 
 

作者:张传波

创新工场创业课堂(敏捷课程)讲师

软件研发管理资深顾问

CMMI首席专家

《火球——UML大战需求分析》作者

《硬啃设计模式》作者

www.umlonline.org创办人


你可能感兴趣的:(设计模式,UML,类图,composite)