Head First設計模式之組合模式

2021-09-22 17:23:42 字數 1814 閱讀 5165

將物件組合成樹形結構來表現"整體-部分"層次結構。 組合能讓客戶以一致的方法處理個別物件以及組合物件。

主要部分可以被一致對待問題.

組合模式主要包含三個角色

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 抽象產品...