组合模式(Composite)

2020-01-11  本文已影响0人  jiahzhon

使用场景:

角色

代码


public abstract class Component{
    //这个是容器类的抽象类,定义好行为,定义创建移除子容器的方法抽象的。
    public abstract void addComposite(Component c); //添加成员
    public abstract void removeComposite(Component c);//移除成员
    public abstract Component getComposite(int i);//获取子容器
    public abstract void operation();//业务方法
 
}
public class Leaf extends Component{
    //首先重写component的方法
    //叶子节点关键点在于业务
    public void Operation(){
        System.out.print("业务方法");
    }
    
    public void addComponent(Component c){
        //提示报错 。
        System.out.print("不是子容器");
    }
   public void removeComponent(Component c){
        //提示报错 。
        System.out.print("不是子容器");
    }
public Component addComponent(int c){
        //提示报错 。
        System.out.print("不是子容器");
        return null;
    }
 
}
public class Composite extends Component{
    //首先来一个存储的集合
    private ArrayList<Component> list = new ArrayList<Component> ;
    public void addComponent(Component c){
            list.add(c);
    }
   public void removeComponent(Component c){
            list.remove(c);
    }
   public Component getComponent(int c){
            Component c1 =list.get(c);
             return c1;
    }
    public void operation(){
        for(Object obj:list){
            ((Component)obj).operation();
        }
    }

透明模式和安全模式
上面应用组合模式的方式就是透明方式,接口Company定义了addOrg、removeOrg方法,无论是叶子角色还是树枝角色都拥有addOrg、removeOrg方法,从实际使用的角度来说,叶子角色不需要这两个方法。对于外界来说,叶子和树枝的区别是透明的,这就是透明方式。

安全方式就是接口Company里没有定义addOrg、removeOrg方法,只在树枝角色添加addOrg、removeOrg方法。这样用户需要对叶子角色和树枝角色进行判断能不能使用addOrg、removeOrg方法。

透明方式的缺点是叶子角色在添加叶子或者树枝时是什么也不做,用户觉得应该是操作成功了,但是并没有操作成功。安全方式的缺点就是在添加叶子和树枝的时候需要进行判断。

上一篇 下一篇

猜你喜欢

热点阅读