`
youyu4
  • 浏览: 423999 次
社区版块
存档分类
最新评论

Java设计模式七:组合模式(Composite Pattern)

 
阅读更多

组合模式又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解藕.

组合模式可以优化处理递归或分级数据结构.有许多关于分级数据结构的例子,使得组合模式非常有用武之地.

类图:



组成部分:
Component: 为参加组合的对象声明一个公共接口, 不管是组合还是叶结点.
Leaf: 在组合中表示叶子结点对象,叶子结点没有子结点.
Composite: 表示参加组合的有子对象的对象, 并给出树枝购件的行为.

实例:
public abstract class FolderComponent
{
    private String name;

    public String getName()
    {
        return name;
    }

    public void setName(final String name)
    {
        this.name = name;
    }

    public FolderComponent()
    {
    }

    public FolderComponent(final String name)
    {
        this.name = name;
    }

    public abstract void add(FolderComponent component);

    public abstract void remove(FolderComponent component);

    public abstract void display();
}

public class FileLeaf extends FolderComponent
{
    public FileLeaf(final String name)
    {
        super(name);
    }

    @Override
    public void add(final FolderComponent component)
    {
        //...
    }

    @Override
    public void remove(final FolderComponent component)
    {
        //...
    }

    @Override
    public void display()
    {
        System.out.println("FileLeaf:" + this.getName());
    }
}

public class FolderComposite extends FolderComponent
{
    private final List<FolderComponent> components;

    public FolderComposite(final String name)
    {
        super(name);
        this.components = new ArrayList<FolderComponent>();
    }

    public FolderComposite()
    {
        this.components = new ArrayList<FolderComponent>();
    }

    @Override
    public void add(final FolderComponent component)
    {
        this.components.add(component);
    }

    @Override
    public void remove(final FolderComponent component)
    {
        this.components.remove(component);
    }

    @Override
    public void display()
    {
        System.out.println("FolderComposite---name:" + this.getName());
        for (final FolderComponent component : components)
        {
            System.out.println("FolderComposite---component-name:" + component.getName());
        }
    }
}

public class Client
{
    public static void main(final String[] args)
    {
        final FolderComponent leaf = new FileLeaf("runnable file");
        leaf.display();

        final FolderComponent folder = new FolderComposite("new folder");
        folder.add(new FileLeaf("content1 in new folder"));
        folder.add(new FileLeaf("content2 in new folder"));
        folder.display();
    }
}

结果:
FileLeaf:runnable file
FolderComposite---name:new folder
FolderComposite---component-name:content1 in new folder
FolderComposite---component-name:content2 in new folder

分享到:
评论

相关推荐

    33种JAVA设计模式DEMO

    这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式...

    用Java实现23种设计模式

    用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...

    java设计模式源码-DesignPattern:设计模式(Java实现源码)

    java ...组合模式(compositePattern) 装饰器模式(decoratorPattern) 外观模式(facadePattern) 享元模式(flyweightPattern) 代理模式(proxyPattern) 责任链模式(chainPattern) 命令模式(commandPatter

    组合模式(Composite Pattern)原理图

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

    设计模式_组合模式.zip

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

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21、中介者模式 22、解释器模式 23、亨元模式 24、备忘录模式

    JAVA23种设计模式代码学习.zip

    获取到【文件夹】名称: composite_pattern 获取到【文件夹】名称: decorate_pattern 获取到【文件夹】名称: facade_pattern 获取到【文件夹】名称: flyweight_pattern 获取到【文件夹】名称: interperter_...

    Java设计模式,并加上个人理解

    1. 设计模式 1.1 含义 1.2 作用 1.3 设计原则 1.4 分类 2. 简单工厂模式 (SimpleFactoryPattern) 3. 工厂方法模式 (Factory Method) 4. 单例模式 (Singleton) 5. 抽象工厂模式 (Abstract Factory) 6. ...

    java餐饮管理系统源码6-design_patterns:设计模式

    Java设计模式书籍: 大话设计模式 Head First 设计模式 设计模式的类型: 总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、 行为型模式...

    JAVA设计模式.rar

    策略模式【STRATEGY PATTERN】 代理模式【PROXY PATTERN】 单例模式【SINGLETON PATTERN】  多例模式【MULTITION PATTERN】  工厂方法模式【FACTORY METHOD ...组合模式【COMPOSITE PATTERN】 ......

    design-pattern-java.pdf

    实现对象的复用——享元模式(二) 实现对象的复用——享元模式(三) 实现对象的复用——享元模式(四) 实现对象的复用——享元模式(五) 代理模式-Proxy Pattern 设计模式之代理模式(一) 设计模式之代理模式...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1...

    《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解

    关于组合模式的定义:组合模式(Composite Pattern)有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂...

    [源代码] 《易学 设计模式》 随书源代码

    第14章 如法炮制:组合模式 (Composite) 第15章 源源不断:享元模式 (Flyweight) 第16章 按部就班:模板方法模式 (TemplateMethod) 第17章 风吹草动:观察者模式 (Observer) 第18章 变化多端:状态模式 (State) 第19...

    Java设计模式学习教程与案例源码.zip

    Java设计模式学习教程与案例源码.zip 设计模式 ======= [设计模式专题](http://94275.cn/categories/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/) ### 创建型 1. [工厂方法](worthed/OriginBlog/blob/master/...

    java 设计模式资料

    附件中是java实现全部的设计模式,包含代码和工程(jbuilder工程),值得收藏. 此目录里包括了一书中所有23种设计模式的实现(Java 版)源码 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写...

    CompositePattern:复合设计模式示例

    这种设计模式属于结构模式,因为该模式创建了一组对象的树形结构。 此模式创建一个包含其自己的对象组的类。 此类提供了修改其相同对象组的方法。 我们通过以下示例演示复合模式的使用,在该示例中我们将显示组织的...

    单例模式源码java-DesignPattern:在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在

    在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern 1.1 创建型模式 ...

    23种设计模式的java实现源码

    23种设计模式的java实现源码 此目录里包括了一书中所有23种设计模式的实现(Java 版)源码 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写出(&gt;90%原创), 难免有错误的地方,希望...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

Global site tag (gtag.js) - Google Analytics