设计模式----组合模式

组合模式

什么是组合模式

组合模式按照我的理解是:把一组相似的对象当作一个单一的对象,在对象中 除了对象自己有的属性再加上一个属性list 这里面存放的是本对象的集合

比如:权限 权限有老板,管理员,普通人员 ,老板只有一个并且拥有所有权限

管理员:可以拥有对应的权限,不同的管理员负者不同的模块 并且管理不同的普通人员 HR:负责招人等,销售:负者买东西等

普通人员:干事的人

在组合模式中 我们可以只使用一个对象 ,在老板的list中是包含使用管理员的对象

在管理员的list中又包含自己所对应的普通人员 一层管一层

就好像是一颗树

组合模式是做什么的

它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

组合模式的应用场景

部分、整体场景,如树形菜单,文件、文件夹的管理。

使用组合模式的好处

1、高层模块调用简单。

2、节点自由增加。

代码

对象

public class Employee {
    //姓名
    private String name;
    //工作
    private String job;
    //工资
    private Integer salary;
    //用于存放下属
    private List<Employee> subordinates;

    //构造方法   用于创建对象的时候方便
    public Employee(String name, String job, Integer salary) {
        this.name = name;
        this.job = job;
        this.salary = salary;
        //创建集合
        subordinates = new ArrayList<Employee>();
    }

    //添加下属到集合中
    public void add(Employee e) {
        subordinates.add(e);
    }

    //删除集合中的下属
    public void remove(Employee e) {
        subordinates.remove(e);
    }

    //返回集合
    public List<Employee> getSubordinates(){
        return subordinates;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", job='" + job + '\'' +
                ", salary=" + salary +
                ", subordinates=" + subordinates +
                '}';
    }
}

测试

public class Demo {
    public static void main(String[] args) {
        //老板
        Employee CEO = new Employee("A","CEO", 300000);

        //HR经理
        Employee B1 = new Employee("B1","HR", 35000);

        //销售经理
        Employee B2 = new Employee("B2","销售", 50000);

        //HR(工作人员)
        Employee B1C1 = new Employee("B1C1","HR", 5000);
        Employee B1C2 = new Employee("B1C2","HR", 5000);

        //销售(工作人员)
        Employee B2C1 = new Employee("B2C1","销售", 20000);
        Employee B2C2 = new Employee("B2C2","销售", 20000);

        //现在我们把他们组合起来
        CEO.add(B1);
        CEO.add(B2);

        B1.add(B1C1);
        B1.add(B1C2);

        B2.add(B2C1);
        B2.add(B2C2);

        System.out.println(CEO);
        //查看CEO所管理的所有人员
        for (Employee headEmployee : CEO.getSubordinates()) {
            System.out.println(headEmployee);
            for (Employee employee : headEmployee.getSubordinates()) {
                System.out.println(employee);
            }
        }
    }
}

//测试结果

Employee{name='A', job='CEO', salary=300000, subordinates=[Employee{name='B1', job='HR', salary=35000, subordinates=[Employee{name='B1C1', job='HR', salary=5000, subordinates=[]}, Employee{name='B1C2', job='HR', salary=5000, subordinates=[]}]}, Employee{name='B2', job='销售', salary=50000, subordinates=[Employee{name='B2C1', job='销售', salary=20000, subordinates=[]}, Employee{name='B2C2', job='销售', salary=20000, subordinates=[]}]}]}
Employee{name='B1', job='HR', salary=35000, subordinates=[Employee{name='B1C1', job='HR', salary=5000, subordinates=[]}, Employee{name='B1C2', job='HR', salary=5000, subordinates=[]}]}
Employee{name='B1C1', job='HR', salary=5000, subordinates=[]}
Employee{name='B1C2', job='HR', salary=5000, subordinates=[]}
Employee{name='B2', job='销售', salary=50000, subordinates=[Employee{name='B2C1', job='销售', salary=20000, subordinates=[]}, Employee{name='B2C2', job='销售', salary=20000, subordinates=[]}]}
Employee{name='B2C1', job='销售', salary=20000, subordinates=[]}
Employee{name='B2C2', job='销售', salary=20000, subordinates=[]}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值