设计模式:Composite
针对问题
一般的GUI框架都会有“容器”和“控件”的概念,一个容器可以包含多个控件,一个容器也可以包含其他容器;控件可以包含子控件,几个控件组合到容器里可以作为新的控件。如果代码实现中单独处理“容器”和“控件”的绘制的话将会十分复杂,如果用递归的方式去思考这个问题,那么问题可以简化成:
void draw()
{
draw self
for(child in childs)
child.draw();
}
1 2 3 4 5 6 |
void draw() { draw self for(child in childs) child.draw(); } |
这就是Composite模式。
介绍
将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
实现
Composite模式的UML图如下:
Composite是典型的树形结构,如下图:
其中:
1、Leaf节点没有子节点
2、Component节点的Operation被调用时,除了自身的操作(可以空操作),它还会将请求转发给子节点。… Read the rest