主要內容
首先先來乙個沒有運用模式的普通案例
模擬計算器例子
public
class calc
system.out.println(amount);}}
簡單工廠版
class
operation
}class
addextends
operation
}class
subextends
operation
}class
mulextends
operation
}class
divextends
operation
}class
operationfactory
return operation;
}}public
class
calc
}
好處很顯而易見了,簡單工廠方法明確了各自的職責和權利,對於客戶端來說不用在與具體的產品產生依賴關係。但是這裡卻違反了開閉原則,如果想要加入新的運算方法只能修改工廠方法,那麼就引申出了gof23種設計模式之一的工廠方法模式,首先來看下gof和23種設計模式
「四人幫」,又稱gang of four,即erich gamma, richard helm, ralph johnson & john vlissides
建立型模式(5個):單例模式、原型模式、建造者模式、工廠模式、抽象工廠模式。
結構型模式(7個):橋接模式、外觀模式、組合模式、裝飾模式、介面卡模式、**模式、享元模式。
行為型模式(11個):迭代器模式、直譯器模式、觀察者模式、中介者模式、訪問者模式、備忘錄模式、狀態模式、策略模式、模版方法模、命令模式、職責鏈模式式。
現在我們來回歸工廠方法模式
先來看看實現了開閉原則的工廠模式**
inte***ce
factory
class
addfactory
implements
factory
}class
subfactory
implements
factory
}class
mulfactory
implements
factory
}class
divfactory
implements
factory
}public
class
calc
operation operation=factory.creatoperation();
amount=operation.getresult(first,second);
system.out.println(amount);}}
如果想要增加平方的方法就只有寫乙個平方類繼承運算類,在寫乙個平方工廠實現工廠方法,然後客戶端選擇呼叫即可,而不用像簡單工廠一樣還要去加乙個case
下面是簡單工廠和工廠方法uml導圖摘自《大話設計模式》
簡單工廠
工廠方法
剛開始接觸的時候我看了很多部落格和書,卻只是感覺到越來越複雜和麻煩,完全沒有感受到這些方法帶來的好處。畢竟紙上談兵你是理解不了現實打戰的種種,就像站在岸上學不會游泳一樣。
但隨著我一遍又一遍的嘗試和自己專案經驗的結合,然後回來研究拜讀,發現又有不一樣的收穫,越看越能發現它的博大精深和迷人之處。
部落格獻給自己以及和我一樣的小菜鳥,希望我們能在技術的道路上走得更遠、更穩。
設計思想學習 模版方法模式
不知各位看官有無遇到過一種情況,就是很多方法其實很相似,只是各自業務有點區別,大致上還是一樣。而當我看到模版方法模式的時候眼睛一亮,這個可以完美解決問題。其實這個模式並不難,簡單來講就是把相同的抽象出來,運用多型的性質完成不同的事情。看一下大話設計模式裡面的 例子 兩個人分別抄同樣的卷子,然後考試 ...
設計模式學習 工廠方法模式
工廠方法模式,定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到了其子類。之前的簡單工廠模式雖說也非常好,但是在新增和更改生產選項的時候,不得不更改switch和case語句,這點違背了設計模式的開方 封閉的原則。工廠方法模式,既克服了簡單工廠違背開方 封閉原則的缺...
學習設計模式 工廠方法模式
說明 工廠方法跟簡單工廠的區別在於簡單工廠方法在構造的時候,通過判斷輸入引數,例項化不同車物件,而工廠方法新增不同車的工廠,客戶端在呼叫的時候控制例項化哪個車工廠。需求 跟簡單工廠模式一樣,要開不同的車 解決方式 a.乙個開車父類,定義乙個開車方法 b.分別定義子類開奧迪車 開賓士車 開寶馬車 繼承...