適用環境
1、工廠類負責創建的對象比較少
:由于創建的對象較少,不會成工廠方法中的業務邏輯太過復雜。
2、客戶端只知道傳入工廠類的參數
,對于如何創建對象不關心:客戶端既不需要關心創建細節,甚至連類名都不需要記住,只需要知道類型所對應的參數。
- Factory:工廠角色
工廠角色負責實現創建所有實例的內部邏輯。- Product:抽象產品角色
抽象產品角色是所創建的所有對象的父類,負責描述所有實例所共有的公共接口- ConcreteProduct:具體產品角色
具體產品角色是創建目標,所有創建的對象都充當這個角色的某個具體類的實例。
#include "Factory.h"
#include "ConcreteProductA.h"
#include "ConcreteProductB.h"
Product* Factory::createProduct(string proname){
if ( "A" == proname )
{
return new ConcreteProductA();
}
else if("B" == proname)
{
return new ConcreteProductB();
}
return NULL;
}
簡單工廠模式的優點
工廠類含有必要的判斷邏輯,可以決定在什么時候創建哪一個產品類的實例,
客戶端無須知道所創建的具體產品類的類名,只需要知道具體產品類所對應的參數即可,
對于一些復雜的類名,通過簡單工廠模式可以減少使用者的記憶量。通過引入配置文件
,可以在不修改任何客戶端代碼的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。
簡單工廠模式的缺點
由于工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。使用簡單工廠模式將會增加系統中類的個數,在一定程序上增加了系統的復雜度和理解難度。
系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能造成工廠邏輯過于復雜,不利于系統的擴展和維護。
簡單工廠模式由于使用了靜態工廠方法,造成工廠角色無法形成基于繼承的等級結構。
感謝:
https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/behavioral.html
http://www.runoob.com/design-pattern/design-pattern-intro.html