定义:
将对象组合成树形结构以表示”部分-整体“ 的层次结构。"Composite 使得用户对单个对象和组合对象的使用具有一致性。”
类图:
代码:
package designPatterns;
import java.util.ArrayList;
import java.util.List;
abstract class Employer{
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 List<Employer> employers;
public void printInfo(){
System.out.println(name);
}
public List<Employer> getEmployers(){
return this.employers;
}
}
class Programmer extends Employer{
public Programmer(String name){
setName(name);
employers =null;
}
public void add(Employer employer){
}
public void delete(Employer employer){
}
}
class ProjectAssistant extends Employer{
public ProjectAssistant(String name){
setName(name);
employers = null;
}
public void add(Employer employer) {
}
public void delete(Employer employer) {
}
}
class ProjectManager extends Employer{
public ProjectManager(String name) {
setName(name);
employers = new ArrayList<Employer>();
}
public void add(Employer employer) {
employers.add(employer);
}
public void delete(Employer employer) {
employers.remove(employer);
}
}
public class CompositeTest {
public static void main(String[] args) {
Employer pm = new ProjectManager("项目经理");
Employer pa = new ProjectAssistant("项目助理");
Employer programmer1 = new Programmer("程序员1");
Employer programmer2 = new Programmer("程序员2");
pm.add(pa);
pm.add(programmer1);
pm.add(programmer2);
List<Employer> ems = pm.getEmployers();
for(Employer em : ems){
System.out.println(em.getName());
}
}
}
结果:
项目助理
程序员1
程序员2