23种设计模式:13组合模式

介绍

组合模式非常简单,其实就是一个树状结构的组织或者模型,我们可以看看下面的总公司和分公司的组织架构。

    其中有总公司,总公司下面有各种部门和分公司 分公司下面也有相应的部门

组合模式就是为了描述这种部门关系而存在的,UML非常简单,不利于理解,大家可以直接看代码吧!

UML

代码

    Component:接口,代表一种组织架构部
public interface Component {
          
   
    void add(Component component);
    void del(Component component);
    void show();
}
    Composite:接口下面的具体组织,这里用来放拥有部门的公司
public class Composite implements Component{
          
   

    String value;
    List<Component> childred = new ArrayList<>();


    public Composite(String value) {
          
   
        this.value = value;
    }

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

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

    @Override
    public void show() {
          
   
        System.out.println("当前的组织架构是:"  + this.value);
        if(childred != null && childred.size() != 0){
          
   
            for(Component c:childred){
          
   
                c.show();
            }
        }
    }
}
    Leaf:同样继承了Component的接口,这里用来存放部门
public class Leaf implements Component{
          
   

    String value;


    public Leaf(String value) {
          
   
        this.value = value;
    }

    @Override
    public void add(Component component) {
          
   
        System.out.println("没有相应的权限");
    }

    @Override
    public void del(Component component) {
          
   
        System.out.println("没有相应的权限");
    }

    @Override
    public void show() {
          
   
        System.out.println("当前的组织架构是:"  + this.value);
    }
}
    调用例子
public class Demo {
          
   
    public static void main(String[] args) {
          
   
        Composite composite = new Composite("北京总公司");
        Composite CDComposite = new Composite("成都分公司");
        Composite SHComposite = new Composite("上海分公司");
        Composite ZJComposite = new Composite("浙江分公司");

        composite.add(new Leaf("财务部"));
        composite.add(new Leaf("开发部"));
        composite.add(new Leaf("技术部"));

        composite.add(CDComposite);
        composite.add(SHComposite);
        composite.add(ZJComposite);



        CDComposite.add(new Leaf("财务部"));
        CDComposite.add(new Leaf("开发部"));
        CDComposite.add(new Leaf("技术部"));

        SHComposite.add(new Leaf("财务部"));
        SHComposite.add(new Leaf("开发部"));
        SHComposite.add(new Leaf("技术部"));

        ZJComposite.add(new Leaf("财务部"));
        ZJComposite.add(new Leaf("开发部"));
        ZJComposite.add(new Leaf("技术部"));

        composite.show();
    }

}
    打印结果如下
当前的组织架构是:北京总公司
当前的组织架构是:财务部
当前的组织架构是:开发部
当前的组织架构是:技术部
当前的组织架构是:成都分公司
当前的组织架构是:财务部
当前的组织架构是:开发部
当前的组织架构是:技术部
当前的组织架构是:上海分公司
当前的组织架构是:财务部
当前的组织架构是:开发部
当前的组织架构是:技术部
当前的组织架构是:浙江分公司
当前的组织架构是:财务部
当前的组织架构是:开发部
当前的组织架构是:技术部

总结

组合模式很简单也很常用,在实际开发中,如果需要树状结构的上下级关系,就可以考虑组合模式

经验分享 程序员 微信小程序 职场和发展