设计模式系列-组合模式
????? 今天下班客廳的燈確實亮堂了許多,照照鏡子感覺自己一下蒼老許多,看來還是燈光暗比較好,看不出來自己的憔悴啊,哈哈,其實還是頭發長了,決定出去剪發。
?????? 進到美發店,便有熱情的服務生招呼,顯示洗頭,挑選造型師,開始剪發,剪發中被造型師推薦了各種各樣的收費項目,我只選擇了一樣軟化頭發。完畢之后,看了下單子哇塞、好貴噢,不過造型師給我剪的發型我還是很喜歡的,我決定以后還找他剪,但是又太貴,無奈中,發型師向我推薦了他們的會員卡,全場所有項目均5折,最近因為圣誕節還在搞活動這期間辦卡的可享受折上折8.6,我心想那這下就太劃算了,而且他們總店,分店都可以用,所以毫不猶豫的辦了張會員卡。。。囧。。。。
?????? 到家后稍微有點后悔,我竟然一時沖動花了那么多錢辦了張剪發的會員卡,不過辦也辦了,只好自己安慰安慰自己,心想,辦了卡可以打折上折,而且那么多分店想去哪家去哪家,頓時心情好為能好一點了,突然間想到了一個模式,跟現在的場景很合適,名字叫《組合模式》,為什么說跟組合模式很相似呢?
?????? 先看看組合模式的定義吧,在《大話設計模式一書中》組合模式的定義為:“將對象組合成樹形結構以表示‘部分-整體’的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。”
?????? 那就拿我剪發辦卡的事情來分析一下吧。
?????? 首先,一張卡可以在總部,分店,×××店使用,那么總部可以刷卡,分店也可以刷卡,×××店也可以刷卡,這個屬性結構的店面層級關系就明確啦。
?????? 那么,總店刷卡消費與分店刷卡消費是一樣的道理,那么總店與分店對會員卡的使用也具有一致性。
??????1.組合模式的例子
????????組合模式結構圖:
??????? 那么組合模式的實例如下:
??????? 運行結果如下:
?????
????? 2.應用組合模式的會員卡消費
??????? 那么我們就根據我們會員卡的消費,來模擬一下組合模式的實現吧!let's go!
??????? 首先:
?????????????? 1.我們的部件有,總店,分店,×××店!
?????????????? 2.我們的部件共有的行為是:刷會員卡
?????????????? 3.部件之間的層次關系,也就是店面的層次關系是,總店下有分店、分店下可以擁有×××店。
????????有了我們這幾個必要條件后,我的要求就是目前店面搞活動當我在總店刷卡后,就可以累積相當于在所有下級店面刷卡的積分總額,設計的代碼如下:
??????
?????? 這樣在累積所有子店面積分的時候,就不需要去關心子店面的個數了,也不用關系是否是葉子節點還是組合節點了,也就是說不管是總店刷卡,還是×××店刷卡,都可以正確有效的計算出活動積分。
????? 3.什么情況下使用組合模式
?????? 引用大話設計模式的片段:“當發現需求中是體現部分與整體層次結構時,以及你希望用戶可以忽略組合對象與單個對象的不同,統一地使用組合結構中的所有對象時,就應該考慮組合模式了。”
轉載于:https://blog.51cto.com/wangboyang/752433
總結
以上是生活随笔為你收集整理的设计模式系列-组合模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三五财富卡是什么东西
- 下一篇: 设计模式之Facade(外观)模式