5、组合模式

使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。
以公司员工组织架构为例

[图片上传失败...(image-818266-1632387191971)]

  • 步骤一: 创建 Employee 类,该类带有 Employee 对象的列表。
public class Employee {
    private String name;
    private String dept;
    private int salary;
    private List<Employee> subordinates;//下级

    public Employee(String name, String dept, int salary){
        this.name = name;
        this.dept = dept;
        this.salary = salary;
        this.subordinates = new ArrayList<>();
    }

    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 + '\'' +
                ", dept='" + dept + '\'' +
                ", salary=" + salary +
                '}';
    }
}
  • 步骤二: 创建 Employee 类,该类带有 Employee 对象的列表。
public class CompositePatternDemo {
    public static void main(String[] args) {
        Employee ceo = new Employee("name1", "CEO", 100000);

        Employee headSales = new Employee("name11", "Head Sales", 30000);
        Employee headMarketing  = new Employee("name12", "Head Marketing", 30000);

        Employee sale1 = new Employee("name111", "Sales", 10000);
        Employee sale2 = new Employee("name112", "Sales", 10000);

        Employee clerk1 = new Employee("name121", "Marketing", 10000);
        Employee clerk2 = new Employee("name122", "Marketing", 10000);

        ceo.add(headSales);
        ceo.add(headMarketing);
        headSales.add(sale1);
        headSales.add(sale2);
        headMarketing.add(clerk1);
        headMarketing.add(clerk2);

        //打印该组织的所有员工
        System.out.println(ceo);
        for (Employee sub : ceo.getSubordinates()) {
            System.out.println(sub);
            for (Employee sub2 : sub.getSubordinates()) {
                System.out.println(sub2);
            }
        }
    }
}

结果:

Employee{name='name1', dept='CEO', salary=100000}
Employee{name='name11', dept='Head Sales', salary=30000}
Employee{name='name111', dept='Sales', salary=10000}
Employee{name='name112', dept='Sales', salary=10000}
Employee{name='name12', dept='Head Marketing', salary=30000}
Employee{name='name121', dept='Marketing', salary=10000}
Employee{name='name122', dept='Marketing', salary=10000}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 组合模式 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对...
    _兜兜转转_阅读 353评论 0 0
  • 一、组合模式定义 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个...
    聂叼叼阅读 219评论 1 1
  • 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模...
    陈吉思_汗阅读 113评论 0 0
  • 模式定义: 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的...
    Scorw阅读 139评论 0 0
  • 转:http://www.runoob.com/design-pattern/composite-pattern....
    right_33cb阅读 215评论 0 0