您的位置:首页 > 编程语言 > C语言/C++

C++版本之简单生产模式(Simple Factory Pattern)

2009-01-08 09:58 309 查看
设计模式中工厂模式Factory专门负责将大量有共同接口的类实例化,被创建的实例通常都具有共同的父类。该模式可以让客户代码动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类,从而不用知道该类的具体类型。工厂模式有3种,简单工厂(Simple Factory)模式、工厂方法(Factory Method)模式和,抽象工厂(Abstract Factory)模式,本人介绍简单工厂(Simple Factory)模式。

简单工厂(Simple Factory)模式,又称为静态工厂模式。 下面用具体的代码来描述。

1、Product类:该类是所有要实例化的父类,提供共同接口Operation。

class Product
{
public:
virtual ~Product() = 0;
protected:
Product();
public:
virtual void Operation(void) = 0;
};

Product::Product()
{
;
}

Product::~Product()
{
;
}

2、CConcreteProduct:Product类的子类,实现Operation接口。

class ConcreteProduct : public Product
{
public:
ConcreteProduct();
~ConcreteProduct();
public:
virtual void Operation(void);
};

ConcreteProduct::ConcreteProduct()
{
cout<<"ConcreteProduct..."<<endl;
}

ConcreteProduct::~ConcreteProduct()
{

}

void ConcreteProduct::Operation(void)
{
cout<<"Hi,Operation!"<<endl;
}


3、Factory类:根据参数来创建具体类的实例。

enum PRODUCT_TYPE{PRODUCTA,PRODUCTB};

class Factory
{
public:
virtual ~Factory() = 0 ;
static Product * CreateProduct(PRODUCT_TYPE ptype); //看到Static了吗,这就是为什么又叫静态工厂模式的原因
protected:
Factory();
};

Factory::Factory()
{
;
}

Factory::~Factory()
{
;
}

Product * Factory::CreateProduct(PRODUCT_TYPE ptype)
{
if(PRODUCTA == ptype)
{
return new ConcreteProduct();
}
return NULL;
}


4、客户端代码:通过Factory来创建相关的类的实例。

Product *pro = Factory::CreateProduct(PRODUCTA);

pro->Operation(); //这里真正类型是ConcreteProduct

if(pro) //别忘了释放哦
{
delete pro;
pro = NULL;
}

从客户端代码我们看出,我们通过传入不同的参数给Factory类,Factory负责根据不同的参数创建具体子类的实例。因此我们在客户端代码看不到任何子类的具体类名,从而避免了跟具体的类的关联。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: