简单工厂方法模式(Simple Factory Methord)
定義
在工廠模式中,我們把被創建的類的對象(或實例)稱為產品,把創建產品的對象稱為工廠。當需要創建的同一類產品數量是固定的時候,為了簡化操作,我使用一個類作為工廠,根據不同的輸入參數,決定生產的產品。這種模式叫簡單工廠模式。簡單工廠 模式屬于創建型模式,由于生產方法是靜態方法(見下面示例),所以又叫做靜態工廠方法(Static Factory Method)注意:由于違背“開放封裝原則”,簡單工廠模式并不是GoF的23種設計模式之一
實際說明
在以下的示例中,我們模擬了一個游戲的不同職業,如戰士(Warrior),法師(Mage)和弓箭手(Archer),它們都派生于 Character類。不同的職業的攻擊方式是不一樣的,我們在派生的時候,分別進行實現。
class Character{public void attack(){System.out.println("Attack");} }class Archer extends Character{public void attack(){System.out.println("Shoot an arrow.");} }class Mage extends Character{public void attack(){System.out.println("Cast a spell.");} }class Warrior extends Character{public void attack(){System.out.println("Swing a sword.");} }在應用場景中,我們構造了一個角色的簡單工廠類,根據用戶輸入的不同字符串來進行生成,代碼如下:
class CharaterFactory {public static Charater makeCharacter(String type){switch(type){case "Archer": return new Archer();case "Mage": return new Mage();case "Warrior": return new Warrior();default: return new Charater();}} }通過以上的工廠,我們如果需要生產一個法師,只需要調用 Mage mage = CharaterFactory.makeCharacter("Mage") 即可。這樣統一成一個函數以后,可以可以方便地對類進行管理。當有變更發生時,只需要關注工廠類即可解決問題。同時單一的工廠類也便于擴展。
為什么不屬性GoF的23種經典設計模式
這是由于在工廠中,所能生產的產品是寫死的。如果有新產品的加入,我們需要對工廠類的進行直接修改。如在以上示例中,如果新加入一種職業,比如牧師,那么就需要修改方法 makeCharacter(String) 。這樣一來,就違背了“開放封閉原則”(即軟件實體應該是對擴展是開放的,而對修改是封閉的),從而導致每次需求變更都對源代碼進行修改,使代碼管理會非常混亂。
其他示例
- 編譯原則中根據運行符進行相應的操作的示例:https://blog.csdn.net/jx1605/article/details/80524296
總結
以上是生活随笔為你收集整理的简单工厂方法模式(Simple Factory Methord)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闲话四巨头:腾讯,阿里,百度,华为
- 下一篇: 批量安装/卸载/fore-stop ap