`

设计模式之组合模式

 
阅读更多

定义
  
将对象以树形结构组织起来,以达成部分-整体的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.

其意图是将对象组合成树形结构以表示部分-整体的层次结构,composite模式使得用户对单个对象和组合对象的使用具有一致性。Composite模式的一个重要思想是递归组合,关键是一个抽象类,它既可以代表组合对象,又可以代表一个被组合的对象。经常在Java开发中遇到的容器就使用了组合模式,一方面组件可以放在容器中,另一方面容器也可以作为组件放在另外的容器中。

 

 

       抽象构件角色(Component):这是个抽象类,一般就是个接口,它定义出公共接口,安全模式里,构件角色并不定义管理子对象的方法。

为组合中的对象声明接口。

              在适当的情况下,实现所有类共有接口的缺省行为。

              声明一个接口用于访问和管理Componebt 的子组件。

              在递归结构中定义一个接口,用于访问一个父组件,并在合适的情况下实现。

树叶构件角色(Leaf):树叶对象没有下级,只定义原始对象。

                在组合中表示叶节点对象,叶节点对象没有子节点。

                        在组合中定义图元对象的行为。

树枝构件角色(Composite):代表参加组合的下级子对象的对象,还定义出了管理方法:addremove

                     定义有子部件的那些部件的行为存储子部件,

                                Component接口中实现与子部件有关的操作。

                      通过Component接口操纵组合部件的对象。

 

 

 

 

定义接口

public interface Component {   

   public void sampleOperation();   

}  

树枝构建角色是具体的实现类

public class Composite implements Component {   

    private Vector componentVector = new Vector();   

/* 

业务方法 

* */ 

    public void sampleOperation() {  

        Enumeration enumeration = components();  

        while (enumeration.hasMoreElements()){  

            ((Component)(enumeration.nextElement())).sampleOperation();  

        }  

    }  

    /** 

     * 聚集管理方法,增加一个子构建对象 

     * */ 

           public void add(Component component){  

               componentVector.add(component);  

System.out.println("++++++++++"+componentVector.size());  

           }  

           /** 

            * 聚集管理方法,删除一个子构建对象 

            * */ 

           public void remove(Component component){  

               componentVector.remove(component); 

System.out.println("----------"+componentVector.size());  

           }  

           /** 

            * 聚集管理方法,返回聚集的Enumeration对象 

            * */ 

           public Enumeration components(){   System.out.println("**********"+componentVector.size());  

               return componentVector.elements();  

           }  

       } 

这里除基本业务方法外,它增加了,add,与remov方法。此方法可以对子构建进行增加与删除。

树叶构建角色也实现抽象构建角色

public class Leaf implements Component {  

    public void sampleOperation() {  

        System.out.println("增加叶子");  

    }  

 

} 

最后通过测试看下

public class Client {  

 

    /** 

     * @param args 

     */ 

    public static void main(String[] args) {  

        //操作单一方法  

        Leaf l= new Leaf();  

        l.sampleOperation();  

        

               //构造根枝  

               Composite allc = new Composite();  

               //构造次枝  

               Composite c1 = new Composite();  

               ((Composite)allc).add(c1);  

               //构造叶子  

               ((Composite)c1).add(new Leaf());  

               ((Composite)c1).add(new Leaf());  

               ((Composite)c1).remove(new Leaf());  

               allc.sampleOperation();  

           }  

         }  public class Client {

 

       /**

        * @param args

        */

       public static void main(String[] args) {

              //操作单一方法

              Leaf l= new Leaf();

              l.sampleOperation();

 

              //构造根枝

              Composite allc = new Composite();

              //构造次枝

              Composite c1 = new Composite();

              ((Composite)allc).add(c1);

              //构造叶子

              ((Composite)c1).add(new Leaf());

              ((Composite)c1).add(new Leaf());

              ((Composite)c1).remove(new Leaf());

 

              allc.sampleOperation();

       }

 

}

 

从这个测试看出,在枝节上可以构造枝节,在枝节上可以构造叶子 ,并且可以通过remove方法,去掉枝叶。这个也可以再次创建下一级的枝叶。

透明式:则是将原来写在composite中的管理方法,写在接口当中,这样实现他时就必须实现这两个管理方法,包括叶子,这样就是说叶子并不能管理树枝,而也有着两个方法,并且客户端可以调用。

  • 大小: 6.1 KB
分享到:
评论

相关推荐

    设计模式之组合模式(Composite Pattern)

    组合模式是一种行为设计模式,属于面向对象设计中的结构型模式,其主要目的是为了建立一种对象树形结构,这种结构能够使客户端代码以统一的方式处理单个对象和对象的组合。在组合模式中,我们通常会定义一个基类,...

    c++-设计模式之组合模式(Composite Pattern)

    组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以以统一的方式对待单个对象和组合对象,这种模式常用于需要处理树形结构的数据...

    23钟设计模式之组合模式

    组合模式是一种设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得我们可以将对象组织成树状层级结构,使得用户可以统一地处理单个对象和对象组合。这种模式在处理具有分层结构的数据时特别有用,例如...

    Java 23种设计模式12组合模式.pdf

    ### Java 23种设计模式之组合模式 #### 模式概述 组合模式是一种结构型设计模式,主要用于处理树形结构中的对象集合问题。通过这种模式,我们可以将多个对象组织成树形结构来表示“整体-部分”的层级关系,并允许...

    C++设计模式之组合模式(Composite)

    C++设计模式之组合模式(Composite) 组合模式(Composite)是一种结构型设计模式,用于描述分支包含关系,也就是我们说的树形关系。其对象分为枝和叶,每一枝可包含枝和叶,直到全部为叶节点。 组合模式的主要...

    设计模式_组合模式.zip

    这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的...

    pengjielee#blog.me#Javascript设计模式之组合模式1

    组合模式就是用小的对象来构建更大的对象,而这些小的对象本身也许是由更小的子对象构成的。var openDoorCommand = {var openWindow

    Python设计模式之组合模式原理与用法实例分析

    本文实例讲述了Python设计模式之组合模式原理与用法。分享给大家供大家参考,具体如下: 组合模式(Composite Pattern):将对象组合成成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象...

    JAVA设计模式之组合模式原理与用法详解

    JAVA设计模式之组合模式原理与用法详解 组合模式是JAVA设计模式的一种,主要用于处理树形结构的数据。它将不同但是相关的对象组合成树形结构,以实现“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用...

    PHP设计模式之组合模式定义与应用示例

    本文实例讲述了PHP设计模式之组合模式定义与应用。分享给大家供大家参考,具体如下: <?php /** * 组合模式 * * 将对象组合成树形结构以表示部分-整体的层次结构,使得客户对单个对象和复合对象的使用具有一致...

    C++设计模式之组合模式

    在GOF的《设计模式:可复用面向对象软件的基础》一书中对组合模式是这样说的:将对象组合成树形结构以表示“部分-整体”的层次结构。组合(Composite)模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式...

    c++设计模式-结构型模式-组合模式

    c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...

    java常用设计模式-组合模式

    java常用设计模式-组合模式 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户端可以统一对待单个对象和对象组合。在组合模式中...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

Global site tag (gtag.js) - Google Analytics