1. 程式人生 > >大戰設計模式【4】—— 簡單工廠模式

大戰設計模式【4】—— 簡單工廠模式

ref ins 復雜 nsa sta 對象比較 cto cnblogs 配置文件

簡單工廠模式(Simple Factory)

 

設計模式使用的例子

https://github.com/LinkinStars/DesignPatternsAllExample


一、定義

定義一個工廠類,它可以根據參數的不同返回不同類的實例,被創建的實例通常都具有共同的父類。
因為在簡單工廠模式中用於創建實例的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法模式,它屬於創建型模式。


二、結構

Factory(工廠角色):該模式的核心,負責實現創建所有產品實例的內部邏輯,提供一個靜態的工廠方法getProduct(),返回抽象產品類型Product的實例。
Product(抽象產品角色):所有產品類的父類,封裝了各種產品對象的共有方法,它的引入將提高系統的靈活性,
使得在工廠類中只需要定義一個通用的工廠方法,因為所有創建的具體產品對象都是其子類對象。
ConcreteProduct(具體產品角色):簡單工廠模式的創建目標,所有被創建的對象都充當這個角色的某個具體類的實例。


三、優點

實現了對象創建和使用的分離:客戶端可以免除直接創建產品對象的職責,而僅僅“消費”產品。
客戶端無須知道所創建的具體產品類的類名,只需要知道具體產品類所對應的的參數即可。
通過引入配置文件,可以在不修改任何客戶端代碼地情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。


四、缺點

由於工廠類集中了所有產品的創建邏輯,職責過重,一旦不能正常工作,整個系統都要受影響。
使用簡單工廠模式勢必會增加系統中類的個數(引入新的工廠類),增加了系統的復雜度和理解難度。
系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能會造成工廠邏輯過於復雜,不利於系統的擴展和維護。
簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。


五、應用場景

工廠類負責創建的對象比較少,由於創建的對象較少,不會造成工廠方法中的業務邏輯太過復雜。
客戶端只需要知道傳入工廠類的參數,對於如何創建對象並不關心。


六、個人總結

1、簡單工廠模式的要點在於:當你需要什麽,只需要傳入一個正確的參數,就可以獲取你所需的對象,而無須知道其創建細節。
從表面上面看,你的主要邏輯代碼中是沒有new。
2、簡單工廠模式生產的產品擁有通用的方法,也就是說這些產品因為都來自抽象產品所以有共性,也可以有自己的特性。
3、簡單工廠模式,說白了,就是將new的方法封裝在一個工廠中,將生產的產品進行抽象合並。
好處是,當有多個地方都需要使用產品時,可以使用同一個工廠進行生產。
當不需要一個產品時,或者需要添加一種產品時,可以在工廠中直接進行修改
4、缺點是,調用簡單工廠時必須了解這個工廠生產怎麽樣的產品,必須傳入正確的參數。
當工廠崩潰的時候,那麽從工廠獲取產品的地方都會收到影響而不能正常工作。
 
 
 
參考博客:http://www.cnblogs.com/edisonchou/p/6683262.html

大戰設計模式【4】—— 簡單工廠模式