码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-18 20:11:32      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   java   使用   os   for   

1、定义


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

2、通用类图


bubuko.com,布布扣

Component抽象构件角色:定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性。

Leaf叶子构件:叶子对象,其下再也没有其他的分支,也就是遍历的最小单位。

Composite树枝构件:树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构。

3、通用源代码

package Composite;
public abstract class Component {
    //个体和整体都具有的共享
    public void doSomething(){
        //编写业务逻辑
    }
}
package Composite;

import java.util.ArrayList;

public class Composite extends Component{
    //构件容器
    private ArrayList<Component> componentArrayList=new ArrayList<Component>();
    //增加一个叶子构件或树枝构件
    public void add(Component component){
        this.componentArrayList.add(component);
    }
    //删除一个叶子构件或树枝构件
    public void remove(Component component){
        this.componentArrayList.remove(component);
    }
    //获得分支下的所有叶子构件和树枝构件
    public ArrayList<Component> getChileren(){
        return this.componentArrayList;
    }
}
package Composite;

public class Leaf extends Component{
    /*
     * 可以重写父类方法
     *    public void doSomething(){
     *  
     *  }
     */
}
package Composite;

public class Main {
    public static void main(String[] args){
        //创建一个根节点
        Composite root=new Composite();
        root.doSomething();
        //创建一个树枝构件
        Composite branch=new Composite();
        //创建一个叶子节点
        Leaf leaf=new Leaf();
        //建立整体
        root.add(branch);
        branch.add(leaf);
    }
    public static void display(Composite root){
        for(Component c:root.getChileren()){
            if(c instanceof Leaf){//叶子节点
                c.doSomething();
            }else{
                display((Composite)c);
            }
        }
    }
}

设计模式之组合模式(Composite),布布扣,bubuko.com

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

标签:style   blog   http   color   java   使用   os   for   

原文地址:http://www.cnblogs.com/limiracle/p/3920241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!