Factory 方法模式(Factory Method):定義一個用於建立對象的介面,讓子類去執行個體化哪一個類,Factory 方法使一個類的執行個體化延遲到其子類。
與簡單工廠的區別:簡單工廠需要修改原有類,違背了開閉原則。而Factory 方法就避免類這個問題。保持了封裝對象的建立過程的優點,只需增加工廠類就可以,解決了簡單工廠分支判斷的問題。
Factory 方法模式包含四個角色:
Product:抽象產品
ConcreteProduct: 具體產品
Factory: 抽象工廠
ConcreteFactory: 具體工廠
UML類圖
在此以學雷鋒為例,運用Factory 方法模式,將雷鋒的方法視為抽象產品,對應抽象工廠; 學雷鋒的人視為具體產品, 對應具體工廠。如要添加學雷鋒的人員類別只需添加相應的類,而不需要修改原有類。
測試案例:
[code]int main(){ //Factory 方法 IFactory *factory = new UnderGraduateFactory; //new一個大學生工廠 //建立學雷鋒的學生 LeiFeng *student = factory->createLeiFeng(); //學生幹了哪些雷鋒方法 student->BuyRice(); //買米 student->Sweep(); //掃地 student->Wash(); //清洗 return 0;}
雷鋒類(抽象產品):
[code]class LeiFeng{public: virtual void BuyRice(){ std::cout << "Buy rice.\n"; } virtual void Sweep(){ std::cout << "Sweep.\n"; } virtual void Wash(){ std::cout << "Wash.\n"; }};
學雷鋒的人(具體產品):
[code]class UnderGraduate: public LeiFeng{};//學雷鋒的志願者(具體產品)class Volunteer: public LeiFeng{};
雷鋒工廠類(抽象工廠):
[code]class IFactory{public: //建立學雷鋒對象 virtual LeiFeng* createLeiFeng(){ return NULL; } };
學雷鋒的對象工廠(具體工廠):
[code]class UnderGraduateFactory: public IFactory{ LeiFeng* createLeiFeng(){ return new UnderGraduate; }};class VolunteerFactory: public IFactory{ LeiFeng* createLeiFeng(){ return new Volunteer; }};
以上就是C++設計模式淺識Factory 方法模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!