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

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

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

        工厂方法模式例如以下图所看到的:

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

         以下给出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;
}
上述程序測试结果例如以下:

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

參考资料:

[1]《大话设计模式》

[2]《设计模式之禅》

[3]《HeadFirst设计模式》