java设计模式之组合模式

组合模式,一般就是“整体-部分”的概念。

组合模式把整体和部分的关系用树结果表示出来,使得客户端把一个单独的成分对象和复合对象同等对待。

组合模式分为安全式和透明式

首先看看安全式:

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) {
        //操作单一方法
        Component l= new Leaf();
        l.sampleOperation();

        //构造根枝
        Component allc = new Composite();
        //构造次枝
        Component c1 = new Composite();
        allc.add(c1);
        //构造叶子
       c1.add(new Leaf());
       c1.add(new Leaf());
       c1.remove(new Leaf());

        allc.sampleOperation();
    }
}


下来说下几个名词:

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

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

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


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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值