將物件組合成樹形結構來表現"整體-部分"層次結構。 組合能讓客戶以一致的方法處理個別物件以及組合物件。
主要部分可以被一致對待問題.
組合模式主要包含三個角色
2.composite(容器構件):容器節點包含子節點,其子節點可以是葉子節點,也可以是容器節點,它提供乙個集合用於儲存子節點,實現了在抽象構件中定義的行為,包括那些訪問及管理子構件的方法,在其業務方法中可以遞迴呼叫其子節點的業務方法。
3.leaf(葉子構件): 代表參加組合的葉子物件(葉子沒有後繼)。定義組成原始物件的行為。
class**選單的簡單實現program
}public
abstract
class
menucomponent
public
string name
public
abstract
void
add(menucomponent menucomponent);
public
abstract
void
remove(menucomponent menucomponent);
}public
class
menuitem : menucomponent
public
override
void
add(menucomponent menucomponent)
public
override
void
remove(menucomponent menucomponent)
}public
class
menuleaf : menucomponent
public
override
void
add(menucomponent menucomponent)
public
override
void
remove(menucomponent menucomponent)
}
在以下情況下應該考慮使用組合模式:
1、 在物件具有部分-整體層次結構,可以選用組合模式,把整體和部分的操作統一起來,使得層次結構實現更簡單,從外部來使用這個層次結構也簡單。
2、 系統中需要處理乙個樹形結構。
3、 在乙個系統中能夠分離出葉子物件和容器物件,而且它們的型別不固定,需要增加一些新的型別。
實際應用: xml解析 、織結構樹處理、 件系統設計
優點:
組合模式使得客戶端**可以一致地處理物件和物件容器,無需關係處理的單個物件,還是組合的物件容器。
將」客戶**與複雜的物件容器結構「解耦。
可以更容易地往組合物件中加入新的構件。
缺點:1.在增加新構件時很難對容器中的構件型別進行限制。
2.使設計變得更加抽象、複雜
組合模式在.net 中最典型的應用就是應用與winforms和web的開發中,在.net類庫中,都為這兩個平台提供了很多現有的控制項,然而system.windows.forms.dll中system.windows.forms.control類就應用了組合模式,因為控制項包括label、textbox等這樣的簡單控制項,同時也包括groupbox、datagrid這樣復合的控制項,每個控制項都需要呼叫onpaint方法來進行控制項顯示,為了表示這種物件之間整體與部分的層次結構,微軟把control類的實現應用了組合模式(確切地說應用了透明式的組合模式)。
Head First設計模式之工廠模式
定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個.工廠方法讓類把例項化推遲到子類 1 抽象工廠角色 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的介面或者必須繼承的父類。2 具體工廠角色 它含有和具體業務邏輯有關的 由應用程式呼叫以建立對應的具體產品的物件。3 抽象產品...
《Head First設計模式》之命令模式
命令模式就是將方法呼叫 method invocation 封裝起來。通過封裝方法呼叫,我們可以把運算塊包裝成形,所以呼叫此運算的物件不需要關心事情是如何進行的,只要知道如何使用包裝成形的方法來完成它就可以了。通過封裝方法呼叫,可以用在以下場景 記錄日誌或者重複使用這些封裝來實現撤銷 undo 我對...
Head First設計模式之工廠模式
定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個.工廠方法讓類把例項化推遲到子類 1 抽象工廠角色 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的介面或者必須繼承的父類。2 具體工廠角色 它含有和具體業務邏輯有關的 由應用程式呼叫以建立對應的具體產品的物件。3 抽象產品...