名称 : Composite
结构:
意图:
将对象组合成树形结构以表示“部分-整体”的层次结构。C o m p o s i t e 使得用户对单个对象和组合对象的使用具有一致性。
适用性:
- 你想表示对象的部分-整体层次结构。
- 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
实例:
Employee.java
package Composite_Pattern;
import java.util.List;
public abstract class Employer {
public List employers;
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public abstract void add(Employer employer);
public abstract void delete(Employer employer);
public void printInfo(){
System.out.println(name);
}
public List getEmployers() {
return this.employers;
}
}
Programmer.java
package Composite_Pattern;
public class Programmer extends Employer{
public Programmer(String name) {
setName(name);
employers = null; //程序员, 表示没有下属了
}
public void add(Employer employer) {
}
public void delete(Employer employer) {
}
}
ProjectAssistant.java
package Composite_Pattern;
public class ProjectAssistant extends Employer{
public ProjectAssistant(String name) {
setName(name);
employers = null; //项目助理, 表示没有下属了
}
@Override
public void add(Employer employer) {
}
@Override
public void delete(Employer employer) {
}
}
ProjectManager.java
package Composite_Pattern;
import java.util.ArrayList;
public class ProjectManager extends Employer {
public ProjectManager(String name) {
setName(name);
employers = new ArrayList(); //项目经理下面有一大帮人
}
public void add(Employer employer) {
employers.add(employer);
}
public void delete(Employer employer) {
employers.remove(employer);
}
}
测试 Test.java
package Composite_Pattern;
import java.util.List;
public class Test {
public static void main(String[] args) {
Employer pm = new ProjectManager("项目经理");
Employer pa = new ProjectAssistant("项目助理");
Employer programmer1 = new Programmer("程序员一");
Employer programmer2 = new Programmer("程序员二");
pm.add(pa);//为项目经理添加项目助理
pm.add(programmer2);//为项目经理添加程序员2
List<Employer> ems = pm.getEmployers();
for (Employer em : ems) {
em.printInfo();
}
}
}
总结: 组合模式,这个用例是网上找的。