設計模式 組合模式

2021-09-18 01:59:50 字數 3470 閱讀 4925

將物件組合成樹形結構以表示 「 部分-整體 」 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。這種型別的設計模式屬於結構型模式,它建立了物件組的樹形結構。該模式分為以下兩種形式

安全形式的組合模式:

透明形式的組合模式:

其中,組合模式所包含的各組成部分的說明如下。

component:為組合模式中的物件宣告介面

leaf:在組合模式中表示葉結點物件,葉結點物件沒有子結點,實現所有在component的操作(如上圖的 operation())。

composite:表示組合部件(由自身和子節點組合而成),實現操縱子節點的所有方法(如上圖的 add(),remove(),getchild()方法);實現所有在component的操作(如上圖的 operation())。

client:通過component介面操縱組合部件的物件。

優點:

缺點:

使用場景:

假設我們要建立乙個樹形選單,選單中的樹枝和葉子具有相同的 operation() 方法,那麼我們要如何設計程式,以便於我們遍歷整個樹形選單呢?

在 component 中不去宣告管理子類物件的方法(如 add,remove,getchild),那麼子類的 leaf 就不需要實現它,而是在 composit 宣告所有用來管理子類物件的方法。但是安全模式與依賴倒置原則衝突,並且在遍歷樹形結構的的時候需要進行強制型別轉換(如下文客戶端**中的 showtree((composite)c) )。

步驟一:定義抽象控制項

public

abstract

class

component

}

步驟二:定義 leaf 控制項

public

class

leaf

extends

component

*/}

步驟三:定義 composite 控制項

public

class

composite

extends

component

//刪除乙個葉子構件或樹枝構件

public

void

remove

(component component)

//獲得分支下的所有葉子構件和樹枝構件

public list

getchildren()

}

步驟四:定義客戶端類

public

class

client

//通過遞迴遍歷樹

public

static

void

showtree

(composite root)

else}}

}

在component中宣告所有來管理子物件的方法(如 add,remove,getchild)。那麼子類的 leaf 和 composit 對於外界沒有區別,它們具備完全一致的介面。但是需要將在 leaf 類中存在的管理子物件的方法遮蔽掉,並且丟擲適當的異常。

步驟一:定義抽象控制項

public

abstract

class

component

//增加乙個葉子構件或樹枝構件

public

abstract

void

add(component component)

;//刪除乙個葉子構件或樹枝構件

public

abstract

void

remove

(component component)

;//獲得分支下的所有葉子構件和樹枝構件

public

abstract list

getchildren()

;}

步驟二:定義 leaf 控制項

public

class

leaf

extends

component

*/public

void

add(component component)

public

void

remove

(component component)

public list

getchildren()

}

步驟三:定義 composite 控制項

public

class

composite

extends

component

//刪除乙個葉子構件或樹枝構件

public

void

remove

(component component)

//獲得分支下的所有葉子構件和樹枝構件

public list

getchildren()

}

步驟四:定義客戶端類

public

class

client

//通過遞迴遍歷樹

public

static

void

showtree

(component root)

else}}

}

安全模式在抽象元件中只定義一些預設的行為或屬性,它是把樹枝節點和樹葉節點徹底分開;透明模式是把用來組合使用的方法放到抽象類中,不管葉子物件還是樹枝物件都有相同的結構,因此需要做丟擲異常的處理。

安全模式與依賴倒置原則衝突;透明模式的好處就是它基本遵循了依賴倒置原則,方便系統進行擴充套件。

安全模式在遍歷樹形結構的的時候需要進行強制型別轉換;在透明模式下,遍歷整個樹形結構是比較容易的,不用進行強制型別轉換。

組合模式 設計模式 組合模式

1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...

設計模式 組合模式 組合模式使用

目錄 組合模式概括 組合模式使用場景 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構 作用 使客戶端對單個物件和組合物件保持一致的處理方式 使用場景 1.希望客戶端可以忽略組合物件與單個物件的差異時 2.處理乙個樹形結構時 優點 清楚的定義分層次的複雜物件,表示物件的全部或部分層次 讓客戶...

設計模式 組合設計模式

組合模式 composite pattern 又稱部分整體模式,用於把一組相似的物件當做乙個單一的物件,組合模式依據樹形來組合物件,用來表示部分以及整體層次,為結構型設計模式,它建立來物件組的樹形結構。意圖 將物件組合成樹形結構以表示 部分 整體 的結構層次,組合模式使得使用者對單個物件和組合物件的...