一、概述
将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和使用具有一致性。
二、情景描述
当表示一个公司以及公司下属公司或者部门时,可以通过此设计模式,利用集合将上级公司与下级公司关联起来
三、代码
1.公司抽象类
public abstract class Company {
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void add(Company company);
public abstract void remove(Company company);
public abstract void display(int deepth);
}
2.总公司类
public class ConcreteCompany extends Company {
private List
companys = new ArrayList<>();
@Override
public void add(Company company) {
companys.add(company);
}
@Override
public void remove(Company company) {
companys.remove(company);
}
@Override
public void display(int deepth) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < deepth;i++){
sb.append("-");
}
sb.append(this.getName());
System.out.println(sb);
for (Company c : companys) {
c.display(deepth + 2);
}
}
}
3.HR部门类
public class HRDepartment extends Company{
public HRDepartment(String name) {
super.name = name;
}
@Override
public void add(Company company) {
// TODO Auto-generated method stub
}
@Override
public void remove(Company company) {
// TODO Auto-generated method stub
}
@Override
public void display(int deepth) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < deepth;i++){
sb.append("-");
}
sb.append(this.getName());
System.out.println(sb);
}
}
4.电话客服部门
public class TelDepartment extends Company{
public TelDepartment(String name) {
super.name = name;
}
@Override
public void add(Company company) {
// TODO Auto-generated method stub
}
@Override
public void remove(Company company) {
// TODO Auto-generated method stub
}
@Override
public void display(int deepth) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < deepth;i++){
sb.append("-");
}
sb.append(this.getName());
System.out.println(sb);
}
}
5.测试类
public class Test {
public static void main(String[] args) {
Company root = new ConcreteCompany();
root.setName("山东总公司");
root.add(new HRDepartment("山东人力资源部"));
root.add(new TelDepartment("山东电话客服资源部"));
root.display(0);
}
}