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负责根据不同的参数创建具体子类的实例。因此我们在客户端代码看不到任何子类的具体类名,从而避免了跟具体的类的关联。
简单工厂(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负责根据不同的参数创建具体子类的实例。因此我们在客户端代码看不到任何子类的具体类名,从而避免了跟具体的类的关联。
相关文章推荐
- 简单工厂模式-Simple Factory Pattern
- 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(四):图表库解决方案的改进,简单工厂模式的简化,简单工厂模式总结
- 简单工厂模式(simple factory pattern)
- 我所理解的设计模式(C++实现)——简单工厂模式(Simple Factory Pattern)
- 简单工厂模式:Simple Factory Pattern(转自阿良.NET)
- 设计模式 简单工厂(simple factory pattern)
- Simple Factory Pattern - 简单工厂模式
- 简单工厂模式 Simple Factory Pattern
- 1.简单工厂模式 Simple Factory Pattern
- 简单工厂模式 Simple Factory Pattern
- 23种设计模式之-----简单工厂(静态工厂)模式(SimpleFactory Pattern)
- c++设计模式:简单工厂模式(Simple Factory Pattern)
- C++与模式---简单工厂模式(Simple Factory Pattern)
- 简单工厂设计模式(Simple Factory Design Pattern)
- 简单工厂模式(Simple Factory Pattern)
- c++设计模式:简单工厂模式(Simple Factory Pattern)
- 设计模式简单工厂模式(SimpleFactoryPattern)
- 设计模式笔记4:简单工厂模式(Simple Factory Pattern)
- 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(二):简单工厂模式概述