有了簡單工廠模式,為什么還需要工廠方法模式?
簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,對於客戶端來說,去除了與具體產品的依賴。如果簡單工廠模式需要改動,比如新增加一個運算,那么我們一定要給運算工廠類的方法里面加“Case”的分支條件的,修改原來的類。這樣我們不但對擴展開放了,對修改也開放了,違背了開發-封閉原則的。
什么是工廠方法模式?
定義一個用戶創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。
工廠方法模式實現:
通過一個簡易計算器程序來實現工廠方法模式。
首先先按照簡單工廠模式創建好,運算抽象類,加法運算實現類和減法運算實現類。
運算抽象類:
加法實現類:
減法實現類:
省略除法實現類和乘法實現類,如需要可自行構建。
接下來構建一個工廠接口:
然后用加減各建一個具體工廠去實現這個接口:
加法類工廠:
減法類工廠:
省略除法工廠和乘法工廠,如有需要自行構建,方法雷同。
客戶端實現如下:
首先通過創建yige加法工廠的對象,在通過該對象去調用加法方法獲得的加法對象,然后調用計算方法得到計算結果。
運行結果為:
工廠方法模式實現時,客戶端要決定實例化哪一個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷移到了客戶端代碼來進行。你想要加功能,本來是改工廠類的,而現在是修改客戶端!
喜歡的小伙伴們可以搜索我們個人的微信公眾號“程序員的成長之路”點擊關注或掃描下方二維碼