http://oldboy-bj.taobao.com/

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

http://www.35java.com/zhibo/forum.php?mod=viewthread&tid=273&extra=page%3D2

如果以绘图为例的话,一个文字是一个绘图元件,一个线段是一个绘图元件,而一个长方形也是一个绘图元件,这些绘图元件可以组成一个图片,如果将这个图片也视作一个绘图元件,则这么递回绘图下去,就可以组合成一个较大的、复杂的图形元件,这样的目的可以使用Composite模式来解决。

对于使用者而言,无论是文字、线段或长方形,甚至是组合后的图片元件,它们都拥有一个共同的行为,使用者基本上并不会感觉出它们之间的操作有任何的不同,您可以拖曳、放大、缩小等等,这些行为都是一致的。

以 UML 来表示上面这个例子的结构:



对于Text、Line与Rectangle而言,Picture是一个容器,然而Picture继承Graphic类,所以它也是一个绘图元件,您可以进一步的将Picture组合至另一个Picture中,以形成较大的、复杂的图形。

组合模式的UML结构图如下所示:




依此架构,您可以递回的组合图形元件,例如:



除了绘图元件之外,一些具有层次性或组合性的物件也可以使用Composite模式,像是电路元件、设备元件等等,使用Composite模式可以大大减低这些元件设计的复杂度。
posted on 2011-01-06 15:58  老男孩咖啡  阅读(101)  评论(0编辑  收藏  举报