設計模式之組合模式

組合模式:“將對象組合成樹形結構以表示‘部分-整體’的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。

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.什麼情況下使用組合模式

       引用大話設計模式的片段:“當發現需求中是體現部分與整體層次結構時,以及你希望用戶可以忽略組合對象與單個對象的不同,統一地使用組合結構中的所有對象時,就應該考慮組合模式了。”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章