設計模式 組合模式

2021-08-17 03:04:16 字數 1891 閱讀 9969

組合模式:允許你講物件組合成樹形結構來表現「整體/部分」層次結構。組合能讓客戶以一致的方式處理個別物件以及物件組合。

在上一節我們講述了迭代器模式,這節我們講述的是組合模式,通常組合模式和迭代器模式共用才會達到比較好的效果,接下來我們還是拿上一節講述的場景,在上個場景中,如果晚餐店的選單中有甜點這個子餐單,旗下有自己的子選單項,那麼迭代器模式的作用就不怎麼明顯了,融合後的選單就是樹形結構的樣子,如何能更合理的設計呢,下面我們就看看組合模式起到的神奇效果吧。

首先分清幾個概念:元件(這裡是選單、選單項)、組合(這裡是選單)、樹。 組合包含元件,元件有兩種:組合與葉子節點(選單項)。這就說明組合下可以有其他組合或者也節點。用這些方式組成的資料最後得到樹形結構。下面直接看**來理解理解

首先建立乙個元件的介面

//

選單元件,所有的元件都必須實現這個介面,因為葉節點和組合節點的角色不同,所有我們這裡就丟擲異常,讓子類去實現自身的方法。

public

abstract

class

menucomponent

public

void

remove(menucomponent menucomponent)

public menucomponent getchild(int

i)

public

void

print()

}

接著我們來實現具體的元件選單和選單項

//

選單元件中的選單,必須實現選單元件的介面menucomponent

public

class menu extends

menucomponent

//我們這裡將選單項和子選單加入到選單中,你看,因為選單項和選單都是menucomponent,所以我們只需要乙個方法就可以兩者兼顧了。

public

void

add(menucomponent menucomponent)

public

void

remove(menucomponent menucomponent)

public menucomponent getchild(int

i)

public

void

print()

}}//

選單元件中的選單項,必須實現選單元件的介面menucomponent

public

class menuitem extends

menucomponent

//列印的是選單項的資訊

public

void

print()

}

當然,不能忘記服務員啦

//

服務員類,可以看出**變得簡潔多了

public

class

waitress

public

void

printallmenu()

}

最後我們來進行測試下

public

class

test

}

執行的結果如下:

好了這就是利用組合模式生成的選單樹了。下面總結下某些設計模式的區別,以免搞混

介面卡:改變乙個或多各類的介面

策略:封裝可互換的行為,並使用委託覺得使用哪乙個

迭代器:提供乙個方式來遍歷集合,而無需暴露集合的實現

外觀:簡化一群類的介面

組合:客戶可以將物件的集合以及個別物件一視同仁

觀察者:當某個狀態改變時,允許一群物件能被通知到

下一節:狀態模式

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

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

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

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

設計模式 組合設計模式

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