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();
    }

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

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值