CSDN博客

img xiaoming_t

composite

发表于2004/12/29 14:28:00  1001人阅读


定义

名称:  composite

结构:



意图:

将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

适用性:

  • 你想表示对象的部分-整体层次结构。
  • 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

    效果:


  • 经典案例

    1、Java AWT Component-Container
            毫无疑问的,AWT中的Component-Container体系就是一个很好的Composite模式的例子。Container继承于Component,而Container中有可以包含有多个Component,因为Container实际上也是Component,因而Container也可以包含Container。这样通过Component-Container结构的对象组合,形成一个树状的层次结构。这也就是Composite模式所要做的。
            Composite模式是为了简化编程而提出的,一般的在编程的时候,如果严格的区分Component和Container的话,有时候会带来许多不便,而且这些往往是没有必要的。比如,我要在一个Container中放置一个Component,我并不需要知道这个Component到底是一个Container,或者就是一个一般的Component,在父级容器中所要做的,只是记录一个Component的引用,在需要的时候调用Component的绘制方法来显示这个Component。当这个Component确实是一个Container的时候,它可以通过Container重载后的绘制方法,完成对这个容器的显示,并把绘制消息传递给到它的子对象去。也就是说,对一个父级容器而言,它并不不关心,其子对象到底是一个Component,还是一个Container。它需要将Component和Container统一对待。

    2、JUnit



    最佳实践

    1、Composite优缺点
            优点:对于Composite模式,也许人们一开始的注意力会集中在它是如何实现组合对象的。但Composite最重要之处在于用户并不关心是组合对象还是单个对象,用户将以统一的方式进行处理,所以基类应是从单个对象和组合对象中提出的公共接口。
      缺点:Composite最大的问题在于不容易限制组合中的组件。
            使用改进的composite模式可以缓和这个矛盾,见参考文章2。


    相关模式
    1、visitor / iterator
            在对composite中的元素进行集体操作或遍历操作时,经常使用visitor模式和iterator模式

    参考文章
    1、设计模式之Composite(组合)
            http://dev.csdn.net/article/52/52259.shtm
    2、从Java类库看设计模式 (Composite,Strategy,Iterator)
             http://www.sawin.com.cn/doc/SD/UML/classlib.htm
    3、诊断 Java 代码: 深度优先访问器和中断的分派
            http://www-900.ibm.com/developerWorks/cn/java/j-diag/part20/index.shtml

    0 0

    相关博文

    我的热门文章

    img
    取 消
    img