設計模式 組合模式

2022-09-07 08:12:12 字數 1714 閱讀 7063

最後更新日期: 2017-12-10

最近一直在看《head first 設計模式》一書,此篇文章是基於 「第九章-迭代器與組合模式」, 我將此節分為兩個部分: 迭代器、組合模式。

強烈推薦此書。

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

其實生活中有很多組合的例子:

用 swift 來設計組合模式,需要理解其對應關係

有時候,為了方便處理,你也可以將 leaf 理解為 沒有子節點的 composite

需求:

現在有如下的需求:

設計早中晚選單,

對選單設計需要更改合適,新增以及刪除都需要比較方便。

這種典型的樹形結構圖,可以利用組合模式來設計。 可以根據swift 的 協議擴充套件特效,和適合的設計出對應的模型

componentmenucomponet

/** 

name 與 display() 是遵守次協議必須實現的

利用協議擴充套件,可以預設實現協議宣告的內容

*/protocol menucomponet

var price : double?

var isvegetarian : bool

func display()

func add(_ comp : menucomponet)

func remove(_ comp : menucomponet)

}extension menucomponet

var isvegetarian : bool

func add(_ comp : menucomponet) {}

func remove(_ comp : menucomponet) {}

}

leafmenuitem

/**

這是每乙個具體的選單類,必須有**金額等資訊

當然,此處也是可以用struct來實現

*/class menuitem : menucomponet

func display()

}

compositemenu

/**

相當於慘淡型別,早餐,午餐,水果、晚餐的型別

它可以包含子的 menu, 也可以包含 menuitem

*/class menu : menucomponet

func add(_ comp: menucomponet)

func remove(_ comp: menucomponet) )

}func display() }}

在 客戶端(client) 呼叫的時候, 我們可以實現對應的方法, 例如 display()

class waiter 

// 此處僅僅設計了乙個 display 的功能, 你可以新增更多功能

func display() }}

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

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

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

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

設計模式 組合設計模式

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