2019独角兽企业重金招聘Python工程师标准>>>
组合模式:
将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的适用具有一致性。
当你发现需求中是提现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时, 就应该考虑用组合模式了。
/**
* @author stefanie zhao
* @date 2014-8-21 下午01:41:21
*/
public abstract class Company {
protected String name;
public Company(String name) {
this.name = name;
}
public abstract void add(Company c);
public abstract void remove(Company c);
public abstract void display(int depth);
public abstract void lineOfDuty();
}
import java.util.ArrayList;
import java.util.List;
/**
* @author stefanie zhao
* @date 2014-8-21 下午01:43:13
*/
public class ConcreteCompany extends Company {
private List<Company> children = new ArrayList<Company>();
public ConcreteCompany(String name) {
super(name);
}
@Override
public void add(Company c) {
children.add(c);
}
@Override
public void remove(Company c) {
children.remove(c);
}
@Override
public void display(int depth) {
System.out.println(Util.getString(depth) + name);
for (Company c : children)
c.display(depth + 2);
}
@Override
public void lineOfDuty() {
for (Company c : children)
c.lineOfDuty();
}
}
/**
* @author stefanie zhao
* @date 2014-8-21 下午01:43:13
*/
public class FinanceDepartment extends Company {
public FinanceDepartment(String name) {
super(name);
}
@Override
public void add(Company c) {
}
@Override
public void remove(Company c) {
}
@Override
public void display(int depth) {
System.out.println(Util.getString(depth) + name);
}
@Override
public void lineOfDuty() {
System.out.format(" %s 公司财务收支管理", name);
}
}
/**
* @author stefanie zhao
* @date 2014-8-21 下午01:43:13
*/
public class HRDepartment extends Company {
public HRDepartment(String name) {
super(name);
}
@Override
public void add(Company c) {
}
@Override
public void remove(Company c) {
}
@Override
public void display(int depth) {
System.out.println(Util.getString(depth) + name);
}
@Override
public void lineOfDuty() {
System.out.format(" %s 员工招聘培训管理", name);
}
}
/**
* @author stefanie zhao
* @date 2014-8-21 下午01:48:01
*/
public class Util {
public static String getString(int depth) {
String a = "";
for (int i = 0; i < depth; i++)
a += "-";
return a;
}
}
public class Main {
public static void main(String[] args) {
ConcreteCompany root = new ConcreteCompany("北京总公司");
root.add(new HRDepartment("总人力资源"));
root.add(new FinanceDepartment("总财务"));
ConcreteCompany comp = new ConcreteCompany("上海华东分公司");
comp.add(new HRDepartment("华东分公司人力资源"));
comp.add(new FinanceDepartment("华东分公司财务"));
root.add(comp);
ConcreteCompany nj = new ConcreteCompany("南京办事处");
nj.add(new HRDepartment("南京办事处人力资源"));
nj.add(new FinanceDepartment("南京办事处财务"));
comp.add(nj);
root.display(1);
root.lineOfDuty();
}
}