Composite模式好處:
1.使客戶端調用簡單,客戶端可以一致的使用組合結構或其中單個對象,用戶就不必關係自己處理的是單個對象還是整個組合結構,這就簡化了客戶端代碼。
2.更容易在組合體內加入對象部件. 客戶端不必因爲加入了新的對象部件而更改代。
一個總公司下面有部門和分公司,分公司下面也有部門和分公司。
1.組合模式的例子
public abstract class GongSi {
String name;
public GongSi(String name)
{
this.name=name;
}
public void ShowName()
{
System.out.println(name);
}
public abstract void add(GongSi gongSi);
public abstract void remove(GongSi gongSi);
public abstract void iterate();
}
public class BuMen extends GongSi{
public BuMen(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void add(GongSi gongSi) {
// TODO Auto-generated method stub
}
@Override
public void remove(GongSi gongSi) {
// TODO Auto-generated method stub
}
@Override
public void iterate() {
// TODO Auto-generated method stub
System.out.println(name);
}
}
public class FenGongSi extends GongSi{
private ArrayList<GongSi> list=new ArrayList<GongSi>();
public FenGongSi(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void add(GongSi zongGongSi) {
// TODO Auto-generated method stub
list.add(zongGongSi);
}
@Override
public void remove(GongSi gongSi) {
// TODO Auto-generated method stub
list.remove(gongSi);
}
@Override
public void iterate() {
// TODO Auto-generated method stub
System.out.println(name);
for (GongSi c : list) {
c.iterate();
}
}
}
public static void main(String[] args) {
FenGongSi fenGongSi=new FenGongSi("總公司");
fenGongSi.add(new BuMen("總公司下部門1"));
fenGongSi.add(new BuMen("總公司下部門2"));
FenGongSi fengongsi1=new FenGongSi("總公司下分公司1");
fenGongSi.add(fengongsi1);
FenGongSi fengongsi2=new FenGongSi("總公司下分公司2");
fenGongSi.add(fengongsi2);
FenGongSi fengongsi11=new FenGongSi("總公司下分公司1分部門1");
fengongsi1.add(fengongsi11);
FenGongSi fengongsi12=new FenGongSi("總公司下分公司1分部門2");
fengongsi1.add(fengongsi12);
FenGongSi fengongsi21=new FenGongSi("總公司下分公司2分部門1");
fengongsi2.add(fengongsi21);
FenGongSi fengongsi22=new FenGongSi("總公司下分公司2分部門2");
fengongsi2.add(fengongsi22);
fenGongSi.iterate();
}
運行結果:
總公司
總公司下部門1
總公司下部門2
總公司下分公司1
總公司下分公司1分部門1
總公司下分公司1分部門2
總公司下分公司2
總公司下分公司2分部門1
總公司下分公司2分部門2
3.什麼情況下使用組合模式
引用大話設計模式的片段:“當發現需求中是體現部分與整體層次結構時,以及你希望用戶可以忽略組合對象與單個對象的不同,統一地使用組合結構中的所有對象時,就應該考慮組合模式了。”