说明:本文仅供学习交流,转载请标明出处,欢迎转载!
工厂方法模式与简单工厂模式的区别在于:在简单工厂模式中,所有的产品都是有一个工厂创造,这样使得工厂承担了太大的造产品的压力,工厂内部必须考虑所以的产品被造的可能,所以工厂里面会内置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设计模式》