将对象组合成树形结构用以表示“部分-整体”的层次结构。“Composite” 使得用户对单个对象和组合对象的使用具有一致性。
想表示对象的部分 - 整体 层次结构。
希望用户忽略可以忽略组合对象和单个对象之间的差距不同,可以统一的使用组合结构中的所有对象。
呈树形结构。
Composite 组合中的对象接口,在通用情况下,实现所有类的通用的默认行为。
public abstract class Employer { public List employers; public void printInfo() { System.out.println(name); } public List getEmployers() { return this.employers; } public abstract void add(Employer employer); public abstract void delete(Employer employer); private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
Leaf 子节点,在组合中表示叶节点对象,叶节点是没有子节点的,所以集合为空。定义节点对象的行为。
public class Programmer extends Employer { public Programmer(String name) { setName(name); employers = null;//没有下属 } @Override public void add(Employer employer) { } @Override public void delete(Employer employer) { }}
Composite 节点管理,存储子节点,和对子节点进行管理和维护的行为方法。
public class ProjectManager extends Employer { public ProjectManager(String name){ setName(name); employers = new ArrayList(); } @Override public void add(Employer employer) { employers.add(employer); } @Override public void delete(Employer employer) { employers.remove(employer); }}
测试
创建子节点,并添加到管理节点对象上,使用管理对象,统一管理和使用。
public static void main(String[] args){ Employer pm = new ProjectManager("项目经理"); Employer pa = new ProjectAssistant("助理"); Employer programmer = new Programmer("程序员"); pm.add(pa); pm.add(programmer); Listems = pm.getEmployers(); for(Employer em : ems) { System.out.println(em.getName()); } }
通过组合模式,把不同的对象统一起来,并添加到统一的管理对象下,统一管理。可以创建不同的管理对象,通过集合,并在下面继续添加不同的子节点对象。整体呈树形结构排列。