最後更新日期: 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 又稱部分整體模式,用於把一組相似的物件當做乙個單一的物件,組合模式依據樹形來組合物件,用來表示部分以及整體層次,為結構型設計模式,它建立來物件組的樹形結構。意圖 將物件組合成樹形結構以表示 部分 整體 的結構層次,組合模式使得使用者對單個物件和組合物件的...