工廠方法模式

工廠方法模式去掉了簡單工廠模式中的工廠方法的靜態屬性,使得它可以被子類繼承。這樣在簡單工廠模式裏集中在工廠方法上的壓力可以由工廠方法模式裏不同的工廠子類分擔。

組成

抽象工廠角色:
模式的核心,是具體工廠角色必須實現的接口或者必須繼承的父類。
具體工廠角色:
它含有具體的業務邏輯代碼,由應用程序調用來創建對應的具體產品。
抽象產品角色:
它是具體產品集成的父類或者是實現的接口。
具體產品角色:
爲具體工廠角色所創建的對象。
實例

接簡單工廠的例子,我們的暴發戶突然對司機起了同情心,決定組個司機小隊,每輛車由專門的司機負責。

  /* 工廠方法模式 亞里士朱德 2010-9 */ #include <iostream> #include <cstring> using namespace std; //抽象產品:轎車 class Car { public: void drive() { cout<<"開車"<<endl; } }; //具體產品:寶馬車,奔馳車 class BMWCar:public Car { public: BMWCar() { cout<<"寶馬車司機"<<endl; } }; class BenzCar:public Car { public: BenzCar() { cout<<"奔馳車司機"<<endl; } }; //抽象工廠:司機隊長 class Driver { public: Car* getcar(); }; //具體工廠:寶馬車司機,奔馳車司機 class BMWDriver:public Driver { public: Car* getcar() { return new BMWCar(); } }; class BenzDriver:public Driver { public: Car* getcar() { return new BenzCar(); } }; void main() { Driver *driver = new BenzDriver(); Car *mycar = ((BenzDriver*)driver)->getcar(); mycar->drive(); system("pause"); }   

優點 

工廠方法模式使結構變得靈活,當有新的產品產生時,只要按照抽象產品角色、抽象工廠角色的結構也是符合開閉原則的。

缺點

當產品種類非常多時,會出現大量的與之對應的工廠對象。
 

發佈了41 篇原創文章 · 獲贊 16 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章