`
uule
  • 浏览: 6359059 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

组合模式:Composite模式

阅读更多

将对象组合成树形结构 以表示部分和整体的层次结构.

组合模式使得用户对单个对象和组合对象的适用具有一致性.


    组合模式是将对象之间的关系以数据结构中的2 叉树表现出来,使得客户端将单纯的元素与复杂元素同等看待,这样的话使得用户在操作不同的子类元素时可以和根节点元素一样操作,在透明模式下即根元素和叶元素公用同一个接口达到共同的结果。

组合模式就是解决部分与整体的关系的一种模式。

 

意图

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

动机

客户代码过多的依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(非抽象接口)的变化将引起客户代码的频繁变化代码的代码维护和扩展的困难,我们需要将客户代码与复杂的对象容器结构解偶。

适用性

l          想表示对象的部分 - 整体层次结构

l          希望用户忽略组合对象与单个对象的不同 ,用户将统一地使用组合结构中的所有对象。

结构

 

 

参与者

l          抽象构件( Component )角色                           IComposite               

l          树叶构件( Leaf )角色                 (Employees )

l          树枝构件                       (Boss)

Composite 模式的优点

1.          客户代码不依赖复杂对象本身的结构变化

2.          用户不需要特别关心复杂对象的具体结构只要等同于根对象操作


先用一个普通的例子来解释一下组合模式. 一个很大的集团公司, 在各个大区开有分公司, 在小地区开有办事处, 一个经理,可以在办事处开展业务, 也可以在分公司工作, 还可以在总公司工作, 这是因为, 不管是总公司, 分公司, 还是办事处, 经理的工作模式基本相同, 而且总公司, 分公司和办事处的外部结构也很相似, 任何一个经过培训的经理, 都可以在总公司, 分公司或办事处工作.  这是因为分公司, 总公司在管理上具有一致的接口.

再举一例, 文件系统中有文件, 也有文件夹(其实是特殊的文件), 文件和文件夹组合在一起, 可以成为一个更大的文件夹. 在用户看来,不管是文件, 还是文件夹, 还是更目录, 对它们的操作都是一致的(当然试图把一个文件夹放到文件下面是不容许的). 这就是说整体和部分具有一致的接口.

 

//公共接口  
package designpattern.composite;  
public interface Component {  
    public void add(Component c);  
    public void remove(Component c);  
    public void display(int depth);  
}  
 
//叶子节点  
public class Leaf implements Component{  
    private String name;  
    public Leaf(String n){  
        this.name = n;  
    }  
    public void add(Component c) {  
        System.out.println("leaf node can't add sub component.");  
    }  
    public void display(int depth) {  
        String sketon = "";  
        for(int i=0; i<depth; i++){  
            sketon += "-";  
        }  
        System.out.println(sketon + name);  
    }  
    public void remove(Component c) {  
        System.out.println("leaf node can't remove sub component.");  
    }  
}  
 
//枝节点   
public class Composite implements Component{  
    List<Component> children = new ArrayList<Component>();  
    private String name;  
    public Composite(String name){  
        this.name = name;  
    }  
      
    public void add(Component c) {  
        children.add(c);  
    }  
    public void remove(Component c) {  
        children.remove(c);  
    }  
    public void display(int depth) {  
        String sketon = "";  
        for(int i=0; i<depth; i++){  
            sketon += "-";  
        }  
        System.out.println(sketon + name);  
        for(Component c : children){  
            c.display(depth + 2);  
        }  
    }  
}  
 
//测试用例 使用组合模式构造windows系统c盘目录结构  
  
public class Test {  
    public static void main(String[] args){  
        Component root = new Composite("C:\\");  
        Component programs = new Composite("Program Files");  
        programs.add(new Leaf("360杀毒"));  
        programs.add(new Leaf("Office 2007"));  
        programs.add(new Leaf("Movie Maker"));  
        Component windows = new Composite("Windows");  
        windows.add(new Leaf("system"));  
        windows.add(new Leaf("system32"));  
        windows.add(new Leaf("temp"));  
        Component autoexec = new Leaf("AUTOEXEC.BAT");  
        Component boot = new Leaf("boot.ini");  
        root.add(programs);  
        root.add(windows);  
        root.add(autoexec);  
        root.add(boot);  
        root.display(0);  
    }  
}  
 
以上程序的最后输出:

C:\  
--Program Files  
----360杀毒  
----Office 2007  
----Movie Maker  
--Windows  
----system  
----system32  
----temp  
--AUTOEXEC.BAT  
--boot.ini  

 适用情景: 当部分和整体呈现层次结构, 并且用户希望在操作上忽略部分和整体的差异时. 也就是说组合模式让客户可以一致的适用组合结构和单个对象.

来源:http://blog.csdn.net/sunxing007/archive/2010/03/28/5425737.aspx

参考:http://blog.csdn.net/fanweiwei/archive/2008/02/26/2121336.aspx

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

相关推荐

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

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

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式)

    在组合模式中,我们定义了两个主要的角色:Component(组件)和Composite(组合)。Component 是一个抽象基类,为所有对象(无论是基本元素还是复合元素)定义公共接口。Composite 类实现了 Component 接口,并且...

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) (Level 300)

    组合模式是一种结构型设计模式,它允许我们创建部分-整体层次结构,使得部分与整体具有相同的行为。在C#中,这种模式可以帮助我们构建复杂的树形结构,使得客户端代码可以一致地处理单个对象和对象集合。让我们深入...

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

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够以统一的方式处理单个对象和对象集合。在C++中,组合模式的应用可以帮助我们构建灵活且易于操作的对象层次结构,使得客户端...

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

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

    【Java设计模式-源码】组合模式:构建灵活的树结构

    在Java中,组合模式用于将对象组合成树结构,以表示部分 - 整体层次结构。该模式允许客户端统一对待单个对象和对象的组合。 二、组合设计模式的别名 Object Tree(对象树) Composite Structure(组合结构) 三、...

    设计模式面面观(11):组合模式(Composite Pattern)-结构型模式

    **设计模式面面观:组合模式(Composite Pattern)** 组合模式是软件工程中的一种结构型设计模式,它允许我们以树形结构来表示部分与整体的关系,使得客户端代码可以一致地处理单个对象和对象组合。在组合模式中,...

    组合模式(Composite Pattern)原理图

    组合模式(Composite Pattern)是一种对象结构型模式,其定义是将多个对象组合成树形结构以表示“整体-部分”关系的层次结构。它使得客户端对单个对象和组合对象的使用具有一致性。在组合模式中,对象被组织成树形...

    设计模式:可复用面向对象软件的基础.zip

    7. 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。它使得用户对单个对象和组合对象的使用具有一致性。 8. 装饰模式(Decorator):动态地给一个对象添加一些额外的职责。装饰者模式...

    《设计模式:可复用面向对象软件的基础》英文版

    如适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰者模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)等。 - **行为型模式**:关注于对象间的职责分配,...

    组合模式 Composite Pattern

    **组合模式**(Composite Pattern)是一种常用的结构型设计模式,主要用于构建具有层次结构的对象系统。它允许客户端以一致的方式处理单个对象和组合对象,简化了高层模块的调用。通过组合模式,可以将多个对象组织成...

    Composite Pattern(组合模式)

    **组合模式(Composite Pattern)详解** 组合模式是一种结构型设计模式,它将对象组织成树形结构,使得用户可以对单个对象和对象集合进行统一操作。这种模式在处理部分与整体关系时非常有用,允许我们一致地处理...

    设计模式:可复用面向对象软件的基础--详细书签版

    2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 compositor和composition 27 2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 monoglyph 30 2.4.3 decorator 模式 32 2.5...

    组合模式-五子棋代码.zip

    组合模式是一种对象结构型设计模式,它允许我们以树形结构来表示部分-整体关系,使得我们可以像处理单个对象一样处理整个集合。在五子棋游戏的实现中,组合模式的应用尤为关键,因为它帮助我们将棋盘上的棋子和棋盘...

    设计模式_组合模式.zip

    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...

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

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

    《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式

    - **组合模式**(Composite):将对象组合成树形结构以表示部分-整体层次结构。 - **装饰器模式**(Decorator):动态地给一个对象添加一些额外的责任。 - **外观模式**(Facade):为子系统中的一组接口提供一个...

    C++设计模式课件20_Composite_组合模式.pdf

    组合模式(Composite Pattern)是一种树形结构的设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以对单个对象和组合对象进行一致性的操作处理,即客户程序可以像操作单个对象...

    实验八:组合模式.rar

    组合模式是一种设计模式,它将对象组织成树形结构,使得用户可以统一处理单个对象和对象集合。在本实验中,我们将深入探讨组合模式的原理、实现方式以及其在实际编程中的应用。 首先,我们要理解组合模式的核心概念...

Global site tag (gtag.js) - Google Analytics