说明:本文仅供学习交流,转载请标明出处。欢迎转载。
工厂方法模式与简单工厂模式的差别在于:在简单工厂模式中。全部的产品都是有一个工厂创造,这样使得工厂承担了太大的造产品的压力,工厂内部必须考虑所以的产品被造的可能。所以工厂里面会内置switch...case语句来自适应地依据用户的输入自适应地产生产品,同一时候简单工厂模式另一个缺点就是当用户新增了一个产品类时,须要去工厂里面去改动switch...case语句,这样就明显地违背了“开放-封闭原则”。而工厂方法模式则克服了这个缺点,该模式对工厂做了进一步的抽象,而继承出更专一的工厂,每一个详细的工厂只制造一类产品,这样分工明白,工厂的压力也就不会那么大。
工厂方法模式例如以下图所看到的:
以下给出C++的一种工厂方法模式的举例:
#include<iostream> using namespace std; class Base//抽象产品类 { public: virtual void print()=0; }; class B1:public Base//详细产品类B1 { public: void print(){cout<<"This is B1::print"<<endl;} }; class B2:public Base//详细产品类B2 { public: void print(){cout<<"This is B2::print"<<endl;} }; class Factory//抽象工厂类 { public: virtual Base* getInstance()=0; }; class Factory_B1:public Factory//详细工厂类Factory_B1 { public: Base* getInstance(){return new B1;} }; class Factory_B2:public Factory//详细工厂类Facotry_B2 { public: Base* getInstance(){return new B2;} }; int main() { /****測试产品B1*******/ Factory &pf=Factory_B1(); Base *pb=pf.getInstance();//工厂B1产生B1实例 pb->print(); delete pb;//释放堆空间 /****測试产品B2*****/ pb=Factory_B2().getInstance(); pb->print(); delete pb; return 0; }上述程序測试结果例如以下:
參考资料:
[1]《大话设计模式》
[2]《设计模式之禅》
[3]《HeadFirst设计模式》