設計思想學習 工廠方法模式

2021-08-13 16:39:35 字數 2121 閱讀 4103

主要內容

首先先來乙個沒有運用模式的普通案例

模擬計算器例子

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.分別定義子類開奧迪車 開賓士車 開寶馬車 繼承...