什麼是簡單工廠模式
簡單工廠模式是類建立型模式。由一個工廠物件決定建立出哪一種產品類的例項,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。
簡單工廠模式中用於建立例項的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法(Static Factory Method)模式
簡單工廠模式的層次結構
- 工廠角色:簡單工廠模式的核心物件,如下面的TechFactory類
- 抽象角色:抽象角色是具體角色的父類(這裡抽象類也可以),用來描述具體角色公有的函式,如下面的Tech
- 具體角色:工廠根據客戶端各具體角色對應的引數輸入,來返回出對應的具體角色,如下面的PHP與Java
簡單工廠模式的優缺點
優點
工廠類包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴
缺點
在進行具體物件的增加的同時,雖然擴充套件了,但也修改了工廠類的業務邏輯,這違背了開放-封閉原則
例項
抽象角色:
![抽象角色](https://i.iter01.com/images/b1d20974905b845897286e91149d4ff6e4794210f8aa7f0d630085375d98d1cb.jpg)
具體角色:
![具體角色](https://i.iter01.com/images/631c435fc711e06a9f25ddc632dce34d754b4a02bb2d4956ec2a122751d68ea9.jpg)
![工廠角色](https://i.iter01.com/images/b4f9c54d9494d5db763b91d58bc538ef6ad8d3ea04f3c997860700edb00b43e5.jpg)
![客戶端](https://i.iter01.com/images/4e1e30cead95c943f3355977055af1b64936fe529c7c6f66609d0681291b6b0e.jpg)
從例項中,我們再看簡單工廠模式的優缺點
- 優點:比如我們要再新增一個C++類,除了新建一個具體類外,還要在工廠類的邏輯中新增一個case,而客戶端只要進行引數的修改就可以了,讓客戶端只要知道介面以及所需要的引數
- 缺點:顯而易見,要進行switch case的修改,這樣違背了開放-封閉原則
如果有什麼疑問或者錯誤,歡迎指出或者討論,謝謝
參考資料:
- 《大話設計模式》
- 工廠三兄弟之簡單工廠模式(二)-極客學院