工厂方法模式之C++实现

说明:本文仅供学习交流,转载请标明出处,欢迎转载!

       工厂方法模式简单工厂模式的区别在于:在简单工厂模式中,所有的产品都是有一个工厂创造,这样使得工厂承担了太大的造产品的压力,工厂内部必须考虑所以的产品被造的可能,所以工厂里面会内置switch...case语句来自适应地根据用户的输入自适应地产生产品,同时简单工厂模式还有一个缺点就是当用户新增了一个产品类时,需要去工厂里面去修改switch...case语句,这样就明显地违背了“开放-封闭原则”。而工厂方法模式则克服了这个缺点,该模式对工厂做了进一步的抽象,而继承出更专一的工厂,每个具体的工厂仅仅制造一类产品,这样分工明确,工厂的压力也就不会那么大。

        工厂方法模式如下图所示:

工厂方法模式之C++实现_第1张图片

         下面给出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设计模式》

你可能感兴趣的:(工厂方法模式之C++实现)