[Note]Creational-Simple Factory

什麼是Simple Factory(簡單工廠)呢?

簡單而言就是: 由一個工廠來生產全部產品 定義:建立一個接口,讓子類自己決定實現哪一個Factory,重點在於工廠,透過工廠的Static method 進行生成的Object

簡單例子

注: 以下程式單純用於解釋,並不能實際執行

透過Factory 類的Static 方法調用方法,傳入參數生成相關的Product
class Product{
 public:
 	virtual void someMethod() = 0
}

class ProductA : public Product{
 public:
 	void someMethod(){
         //TODO For ProductA
     }
}

class ProductB : Public Product{
 public:
 	void someMethod(){
         //TODO for ProductB
     }
}

class Factory{
 public:
 	static Product* getProduct(string type){
         if(type == "A"){
             return new ProductA();
         }
         else if(type == "B"){
             return new ProductB();
         }
         return null;
     }
}

int main(){
 Product* A = Factory::getProduct("A"); //get ProductA instance
 Product* B = Factory::getProduct("B"); //get ProductB instance
}

優點

  • Client可以自行決定生產哪個Product
  • Client免除直接建立Product的責任,只僅僅消費產品
  • Client無需關心具體的類名與相關設置參數

缺點

  • Factory 的職責太重。所有的Product 都由一個Object 生產,一旦不能正常工作,便會影響整個系統的運作
  • 如有不同的Product會增加系統中的class的數目,增加了系統複雜度以及理解難度
  • 擴展十分困難,添加需要修改Factory的邏輯。如果生存的Product較多時,可能會使其邏輯過於複雜,不利於系統的擴展與維護

違背原則

  • 違背了Open-Close Principe
    • 如果有新的Product 需要生成,就必修要修改Factory類

參考資料:
史上最全设计模式导学目录(完整版)