名稱 : 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; //項目助理, 表示沒有下屬了 }@Overridepublic void add(Employer employer) {}@Overridepublic 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(); } }}
總結: 組合模式,這個用例是網上找的。