组合模式

来源:互联网 发布:初识seo ppt 编辑:程序博客网 时间:2024/06/05 18:12

组合模式

组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的操作具有一致性。

又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

在组合模式中含有叶节点和枝节点。

组合模式的结构图

一个典型的OA系统各个分公司也同样需要一个公司的组织结构。

public abstract class Company {


protected Stringname;

public Company (Stringname) {

this.name =name;

}

public abstract void add(Company company);

public abstract void remove(Company company);

publicabstract void display(intdepth);

publicabstract void liveOfDuty();

}

叶子节点 财务部门

public class FinanceDepartmentextends Company{


public FinanceDepartment(Stringnaem) {

super(naem);

}


@Override

public void display(int depth) {

System.out.println(depth+":"+name);

}

@Override

public void add(Company company) {

}

@Override

public void remove(Company company) {

}

@Override

public void liveOfDuty() {

System.out.println(name +":履行职责");

}

}

人力资源部门

public class HRDepartmentextends Company{


List<Company> components =new ArrayList<Company>();

public HRDepartment(Stringname) {

super(name);

}

@Override

public void add(Company company) {

}

@Override

public void remove(Company company) {

}

@Override

public void display(int depth) {

System.out.println(depth+name );

}

@Override

public void liveOfDuty() {

System.out.println(name+" : "+"负责人才招聘");

}

}

树枝节点

public class ConcreteCompanyextends Company{

List<Company> compontents =new ArrayList<Company>(); 

public ConcreteCompany(Stringname) {

super(name);

}

@Override

public void add(Company company) {

compontents.add(company);

}

@Override

public void remove(Company company) {

compontents.remove(company);

}

@Override

public void display(int depth) {

System.out.println(depth+" :: "+name);

depth++;

for(Companycompany : compontents) {

company.display(depth);

}

}

@Override

public void liveOfDuty() {

for(Companycompany : compontents) {

company.liveOfDuty();

}

}

}

Client调用使用者

public class CompasitePatternDemo {


public static void main(String[] args) {

// ConcreteCompany headerquarter = new ConcreteCompany("北京总公司");

// headerquarter.add(new HRDepartment("北京总公司人力资源部"));

// headerquarter.add(new FinanceDepartment("北京总公司财务部"));

ConcreteCompany filiale = new ConcreteCompany("广东东莞分公司");

filiale.add(new HRDepartment("广东东莞分公司人力资源部"));

filiale.add(new FinanceDepartment("广东东莞分公司财务部"));

// headerquarter.add(filiale);

ConcreteCompany wanjiangAgency = new ConcreteCompany("万江办事处");

wanjiangAgency.add(new HRDepartment("万江办事处人力资源部"));

wanjiangAgency.add(new FinanceDepartment("万江办事处财务部"));

filiale.add(wanjiangAgency);

ConcreteCompany fuchengAgency = new ConcreteCompany("附城办事处");

fuchengAgency.add(new HRDepartment("附城办事处人力资源部"));

fuchengAgency.add(new FinanceDepartment("附城办事处财务部"));

filiale.add(fuchengAgency);

System.out.println("结构图\n");

// headerquarter.display(0);

filiale.display(1);

System.out.println("\n职责");

// headerquarter.liveOfDuty();

filiale.liveOfDuty();

}

}

输出结果

结构图


1 :: 广东东莞分公司

2广东东莞分公司人力资源部

2:广东东莞分公司财务部

2 :: 万江办事处

3万江办事处人力资源部

3:万江办事处财务部

2 :: 附城办事处

3附城办事处人力资源部

3:附城办事处财务部


职责

广东东莞分公司人力资源部 : 负责人才招聘

广东东莞分公司财务部:履行职责

万江办事处人力资源部 : 负责人才招聘

万江办事处财务部:履行职责

附城办事处人力资源部 : 负责人才招聘

附城办事处财务部:履行职责



组合模式是一个解决部分与整体关系的设计模式,形成一个树形结构,在父节点和子节点可以使用同样的功能。父节点和子节点可以有同样的结构以及功能。