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

 设计模式中工厂模式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负责根据不同的参数创建具体子类的实例。因此我们在客户端代码看不到任何子类的具体类名,从而避免了跟具体的类的关联。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值