设计模式-结构型-组合模式

145 阅读1分钟

简介

组合模式是结构型的模式一种,其根据树型结构来描述对象,以此来表示个体与整体的关系,其实现也比较简单。

Demo实现

对于一个公司,有一个名称,然后下面有很多BG,每个BG下面又有很多部门,此用组合模式可以表示为:

import java.util.ArrayList;
import java.util.List;

public class Company {
    private String name;
    private List<Company> subordinates;

    public Company(String name) {
        this.name = name;
        this.subordinates = new ArrayList<>();
    }

    public void add(Company subordinate) {
        this.subordinates.add(subordinate);
    }

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

客户端调用如下:

public class Test {
    public static void main(String[] args) {
        Company company = new Company("apple");

        Company phoneBG = new Company("phoneBG");
        Company phoneToolDept = new Company("phoneToolDept");
        Company phoneDesignDept = new Company("phoneDesignDept");
        phoneBG.add(phoneToolDept);
        phoneBG.add(phoneDesignDept);
        company.add(phoneBG);

        Company padBG = new Company("padBG");
        Company padToolDept = new Company("padToolDept");
        Company padDesignDept = new Company("padDesignDept");
        padBG.add(padDesignDept);
        padBG.add(padToolDept);
        company.add(padBG);

        System.out.println(company);
        /**
         * Company{name='apple', subordinates=[Company{name='phoneBG', subordinates=[Company{name='phoneToolDept', subordinates=[]}, Company{name='phoneDesignDept', subordinates=[]}]}, Company{name='padBG', subordinates=[Company{name='padDesignDept', subordinates=[]}, Company{name='padToolDept', subordinates=[]}]}]}
         */
    }
}