java设计模式_组合模式

/**
 * 
 */
package com.wangbiao.design.composite;

import java.util.ArrayList;
import java.util.List;

/**
 * @Title: Component.java
 * @Package com.wangbiao.design.composite
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-28 上午9:50:26 
 * @version V1.0
 */
public abstract class Component {
    String name = null;
    
    public Component(String name) {
        this.name = name;
    }
    
    public abstract void add(Component component);
    public abstract void remove(Component component);
    public abstract void display();

}

class Reaf extends Component{
    
    public Reaf(String name) {
        super(name);
    }

    @Override
    public void add(Component component) {
        // not applicable for Reaf
        System.out.println("Not applicable for Reaf");
    }

    @Override
    public void remove(Component component) {
        // not applicable for Reaf
        System.out.println("Not applicable for Reaf");
    }

    @Override
    public void display() {
        System.out.println("Reaf: "+ name);
    }

}

class Composite extends Component{
    private List<Component> list = new ArrayList<Component>();
    
    public Composite(String name) {
        super(name);
    }

    @Override
    public void add(Component component) {
        list.add(component);
    }

    @Override
    public void remove(Component component) {
        list.remove(component);
    }

    @Override
    public void display() {
        for (Component component : list) {
            if(component instanceof Composite){
                System.out.println("xxxxxxxxxxxxxxCompositexxxxxxxxxxxxxx : "+component.name);
            }else{
                System.out.println("xxxxxxxxxxxxxxReafxxxxxxxxxxxxxx : "+component.name);
            }
            component.display();
        }
        
    }
    
}

/**
 * 
 */
package com.wangbiao.design.composite;

/**
 * @Title: Client.java
 * @Package com.wangbiao.design.composite
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-28 上午10:04:16 
 * @version V1.0
 */
public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {
        
        Component component_one = new Composite("Compositexxxxxxxx");
        component_one.add(new Reaf("reaf_one"));
        component_one.add(new Reaf("reaf_two"));
        
        Component component_two = new Composite("xxxxxxxxComposite");
        component_two.add(new Reaf("reaf_three"));
        component_two.add(new Reaf("reaf_four"));
        
        component_one.add(component_two);
        
        component_one.display();
    }
    
    /*
     * result
    xxxxxxxxxxxxxxReafxxxxxxxxxxxxxx : reaf_one
    Reaf: reaf_one
    xxxxxxxxxxxxxxReafxxxxxxxxxxxxxx : reaf_two
    Reaf: reaf_two
    xxxxxxxxxxxxxxCompositexxxxxxxxxxxxxx : xxxxxxxxComposite
    xxxxxxxxxxxxxxReafxxxxxxxxxxxxxx : reaf_three
    Reaf: reaf_three
    xxxxxxxxxxxxxxReafxxxxxxxxxxxxxx : reaf_four
    Reaf: reaf_four
    */

}
时间: 2024-10-03 21:53:21

java设计模式_组合模式的相关文章

图解Java设计模式之组合模式

图解Java设计模式之组合模式 看一个学校院系展示需求 传统方案解决学院院系展示(类图) 传统方案解决学校院系展示存在的问题分析 组合模式基本介绍 组合模式的原理类图 组合模式解决学校院系展示的应用实例 组合模式在JDK集合的源码分析 组合模式的注意事项和细节 看一个学校院系展示需求 编写程序展示一个学校院系结构 :需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系.如图 : 传统方案解决学院院系展示(类图) 传统方案解决学校院系展示存在的问题分析 1)将学院看

大话设计模式_组合模式(Java代码)

组合模式:将对象组合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 简单描述:1个Composite类,里面持有一个容器成员,容器可以存入自身 大话设计模式中的截图: 代码例子: AbstractComponent类: 1 package com.longsheng.composite; 2 3 public abstract class AbstractComponent { 4 5 public abstract void addC

java设计模式之组合模式

树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题,组合模式通过一种巧妙的设计方案使得用户可以一致性地处理整个树形结构或者树形结构的一部分,也可以一致性地处理树形结构中的叶子节点(不包含子节点的节点)和容器节点(包含子节点的节点).下面将学习这种用于处理树形结构的组合模式. 11.1 设计杀毒软件的框架结构 Sunny软件公司欲开发一个杀毒(AntiVirus)软件,该软件既可以对某

10.设计模式_组合模式

转载自   http://www.cnblogs.com/zhili/p/CompositePattern.html 一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象和复合对象在功能上区别,导致在操作过程中必须区分简单对象和复合对象,这样就会导致客户调用带来不必要的麻烦,然而作为客户,它们希望能够始终一致地对待简单对象和复合对象.然而组合模式就是

Java设计模式应用——组合模式

组合模式实际上是一种树形数据结构.以windows目录系统举例,怎么样用java语言描述一个文件夹? 定义一个文件夹类,文件夹类中包含若干个子文件类和若干个文件类. 进一步抽象,把文件夹和文件都看做节点,于是一个文件夹就可以描述为一个节点类,包含若干个子节点. 我们看看组合模式的代码 // 抽象节点 public abstract class Node { protected String name; abstract void add(Node node); abstract void rem

java设计模式5.组合模式、门面模式、享元模式、桥接模式

组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独的成分对象和由它们组合而成的合成对象同等看待. 抽象构建角色:一个抽象角色,给参加组合的对象规定一个接口,这个接口给出共有的接口及默认行为. 树叶构建角色:代表参加组合的树叶对象,没有子对象,定义参加组合的原始对象行为. 树枝构建角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为. 对于子

java_设计模式_组合模式_Composite Pattern(2016-08-12)

概念: 组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. 有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦. 类图: 涉及角色: 1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为.声明一个接口用于访问和管理Component子部

JAVA设计模式:组合模式

组合(总体与部分关系)模式:将不同可是相关的对象组合成树形结构以实现"部分-总体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. * 模式角色组成: * 1.Component对象: 是组合中的对象接口,是全部类共同拥有的接口.是用于统一定义总体中的部分. 2.Leaf对象: 总体中的部分,没有下一级. 3.Composite对象: 用来存储子部件.在Component接口中实现与部分有关操作. 以公司构成为例,比方公司有总公司.总公司下有分公司,分公司下有办事处等.构成一

Java 设计模式_代理模式(2016-08-19)

概念: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 就是一个人或者机构代表另一个人或者机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 类图: 在代理模式中的角色: ● 抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象. ● 目标对象角色:定义了代理对象所代表的目标对象. ● 代理对象角色:代理对象内部含有目标对象的