工廠模式(AbstractFactory)-創建型模式
重要聲明:
故事純屬虛構,如有雷同請勿對號入座,故事只是為了拋磚引玉,雖以第一人稱和作者本人網名起但不代表本人真實想法,請勿把故事中人物和作者本人聯系起來,故事本意只為模式創造前提條件
角色:
ü Wensi 主演WenSi
ü 女朋友 helen
ü 電瓶車服務員 waiter
劇情:
開場白:我的女朋友對我可真體貼啊,上次是餓著我,發現會把我餓壞了,這不,又想了個招控制我的開支,還能間接的減肥。大家來品品吧
Wensi :今天陪我去充公交卡吧
Helen :啊!又要沖卡了啊,前些天才充的怎麼這麼快就用完了
Wensi :是啊!每天做地鐵一天就4塊錢2人就8塊錢一個月就是200多啊
Helen:那麼多啊
Wensi :恩是啊
Helen :要不我們去買個電瓶車吧!以後你就背著我上班嘿嘿
Wensi :啊?
Helen :好不好嘛
Wensi :好..好..啊
旁白:我的娘啊,這回要苦死我了
Helen :那好我們就去看看吧,大路鴿,吉安特,金陵都不錯啊
Wensi :恩好的啊
旁白:來到了電瓶車大賣場………………………………………………
電瓶車服務員:2位喜歡哪款車哈我們這裡車都很好的,請隨便看看
Helen :好的
Wensi :這個大路鴿?
電瓶車服務員:這款大路鴿最大馬力
Wensi:那,那個吉安特呢?
電瓶車服務員:這款吉安特最大馬力
Wensi:那,那個金陵呢
電瓶車服務員:這款金陵最大馬力
Wensi:我看吉安特比較適中,Helen你看呢
Helen :恩!那就試試車吧
電瓶車服務員:好的
旁白:我們試試車還不錯。。。。
Wensi:好了就要它了,多少錢
電瓶車服務員:2200
旁白:汗!老貴啊。。。。。
Wensi:便宜點吧
電瓶車服務員:2100不能再便宜了哈
Wensi:好
旁白:背著女朋友一路汽車回了家那個樂哈。。。。
這個故事和我們今天要講的模式有聯系嗎?當然有啦,我們來看看作為電動車大賣場有很多櫃台有專門賣各種各樣牌子的電瓶車,我們要在那麼多的品牌電瓶車裡挑選我們想要的電瓶車,那麼我們就需要一個一個的試騎,直到自己挑選到一個滿意的為止,我們發現電瓶車的操作是非常簡單的,打開電瓶發動機,加油門,關閉發動機,所以的電瓶車的操作都是這樣的那麼這樣的話對系統來說他們的操作接口是固定的,只是電瓶車的種類和各類電瓶車的系數在變,試車時電瓶車這個類在劇烈的變化著,這時他就符合工廠模式的條件了,那我們怎麼用面向對象的設計模式來描述這個故事呢?
讓我們來看看我如何用OOD來描述
大家可以看到我在電動車大賣場這裡用了抽象工廠模式,讓具體的電動車類延遲到子類實現,我們也能發現工廠模式經常是和抽象工廠一起合作完成一件事情當然也有很多時候是跟單件模式一起混合運用。
判定這個OOD設計是否合理我們依據我們第二章的設計模式原則來判定
1. 是否符合開閉原則
電動車大賣場在新添一種電瓶車和客戶去試騎是我們只需要增加一個電瓶車的子類和大賣場的專櫃,所以符合開閉原則
答案:符合
2. 是否符合裡氏代換原則
不用不講一下就明白
答案:符合
3. 是否符合合成復用原則
電瓶車的固有屬性屬於組合形式
答案:符合
4. 是否符合依賴倒置原則
我們在上圖中不難發現人和電動車大賣場都是依賴與電動車這個抽象類的所以符合
答案:符合
5. 是否符合接口隔離原則
本模式中的接口只涉及到電動車的基本操作沒有涉及其他任何不相干的操作所以符合
答案:符合
6. 是否符合抽象原則
答案:符合
7. 是否符合迪米特法則
大路鴿專賣店專門賣大路鴿,吉安特專賣店專門賣吉安特,金陵專賣店專門賣金陵。所以符合
答案:符合
總的來講這個OOD設計是符合設計模式的要求
總結 :單件模式
意圖:
提供一個用於創建對象的接口,讓子類決定實例化哪一個類。Factory Method使一個類的實例化延遲到其子類
動機:
軟件系統中我們經常面臨著一個類的形式劇烈變化著,但他的操作接口去不變時我們選擇用工程模式
實用性:
l 當一個類不知道它所必須創建的對象的類的時候
l 當一個類希望由它的子類來指定它所創建的對象的時候
l 當類江創建對象的職責委托給多個幫助子類中的某一個,並你希望將哪一個幫助子類是代理者這一信息局部化的時候
結構:
參與者:
l AbstractFactory (生產工廠)
l ConcreteFactory (大路鴿專櫃、吉安特專櫃、金陵專櫃)
l AbstractProduct (電瓶車)
l ConcreteProduct (大路鴿電瓶車、吉安特電瓶車、金陵電瓶車)
l ClIEnt (Helen 、Weisi、電瓶車服務員)
效果:
1. 為子類提供掛鉤
2. 連接平行的類層次
代碼: