8 組合模式

2021-09-01 18:47:25 字數 2019 閱讀 7138

組合模式

1、組合模式

組合模式屬於物件中的結構模式,有時又叫做部分-整體模式。合成模式是將部分和整體的關係用樹結構表示出來。

2、結構

以上類圖結構涉及三種角色:

抽象構件角色:這是乙個抽象角色,它給參加組合的物件規定乙個介面,這個角色給出共有的介面和預設行為。

樹葉構件角色:代表參加組合的樹葉物件。

樹枝構件角色:代表參加組合的有子物件的物件,並給出樹枝構件物件的行為。

3、**

以下是描述乙個公司層次結構的例項

抽象構件角色company

public abstract class company 

public company(string name, int dep)

private string name;

private int dep = 0;

public company add(company company)

public company remove(company company)

public void operate()

system.out.println(this.name);

} public string getname()

public void setname(string name)

public int getdep()

public void setdep(int dep)

public abstract listgetcomposite();

}

樹葉構件角色leafcompany

public class leafcompany extends company 

public leafcompany(string name, int dep)

@override

public listgetcomposite()

}

樹枝就、構件角色compositecompany

public class compositecompany extends company 

public compositecompany(string name)

@override

public company add(company company)

composite.add(company);

return super.add(company);

} @override

public company remove(company company)

@override

public void operate()

private void display(company company)

} }private void out(company company)

system.out.println(company.getname()+"("+company.getdep()+")");

} public listgetcomposite()

public void setcomposite(listcomposite)

}

客戶端測試程式client

public class client 

}

4、總結

組合模式解耦了客戶程式與複雜元素內部結構,從而使客戶程式可以向處理簡單元素一樣來處理複雜元素。

如果你想要建立層次結構,並可以在其中以相同的方式對待所有元素,那麼組合模式就是最理想的選擇。本章使用了乙個檔案系統的例子來舉例說明了組合模式的用途。在這個例子中,檔案和目錄都執行相同的介面,這是組合模式的關鍵。通過執行相同的介面,你就可以用相同的方式對待檔案和目錄,從而實現將檔案或者目錄儲存為目錄的子級元素。

設計模式8 組合模式

組合模式首先想到的就是樹形結構,比如我們常用的檔案結構,請看windows的檔案結構 無論是檔案或者是資料夾,常用操作都是一致的,比如 複製 貼上 剪下 刪除 所佔空間大小。我們並沒有刻意的去分他是資料夾還是檔案。我們可以把資料夾看成是組合物件,把每乙個檔案看成是單個物件。組合模式模糊了這兩個概念,...

設計模式 (8)組合模式

組合模式 組合模式,是為了解決整體和部分的一致對待的問題而產生的,要求這個整體與部分有一致的操作或行為。部分和整體都繼承與乙個公共的抽象類,這樣,外部使用它們時是一致的,不用管是整體還是部分,使用乙個方法即可遍歷整體中的所有的部分。就像乙個樹形結構一樣。適用性 常用於組織結構,產品結構之類的整體和部...

12 組合模式

1.說明 請參見本文第一章 2.組合模式說明 組合模式 將物件組合成樹形介面以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件具有一致性。為了保持整體和區域性的一致性,整體和區域性具有相同的介面,從而避免判斷該節點是整體還是區域性。介面可以實現為空。使用範圍 在需求中體現部分與整...