设计模式(一) 简单工厂模式

对于工厂模式,具体上可以分为三类:

  • 简单工厂模式;
  • 工厂方法模式;
  • 抽象工厂模式。
对于上面的三种工厂模式,从上到下逐步抽象,并且更具一般性。简单工厂模式是应用于生产大量父类子类对象的方法,例如在一个界面中进行简单的加减乘除的操作,我们可以将加减乘除进行抽象,得到一个接口算数类,加减乘除分别实现这个接口类,利用多态性,在工厂类中进行统一的对象生产,从而有利于对象的管理。实际应用场景包括:
  • 在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;
  • 由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。
下面是简单工厂方法的简单模型:


上面的UML图表示:ProductA,ProductB,ProductC继承于Product,其中方法Show是public属性的,Factory类创造产品的方法CreateProduct依赖于ProductA,ProductB,ProductC。

简单的C++实现 模型如下:

#include<iostream>
using namespace std;
class Product {
public:
  virtual void show() =0;
};

class ProductA : public Product {
public:
    virtual  void show()
	{
		cout<<" I am A"<<endl;	
	} 
};

class ProductB : public Product {
public:
    virtual  void show()
	{
		cout<<" I am B"<<endl;	
	} 
};

class ProductC : public Product {
public:
    virtual  void show()
	{
		cout<<" I am C"<<endl;	
	} 
};


enum ProductType{TypeA, TypeB, TypeC};
class Factory
{
public:
	Product * CreateProduct(ProductType type)
	{
		Product *temp;
		switch(type)
		{
			case TypeA:
			temp=new ProductA();break;
			case TypeB:
			temp=new ProductB();break;
			case TypeC:
			temp=new ProductC();break;
			default:
			return NULL;
		}
		return temp;
	}
};

int main(int argc, char *argv[])
{
	
	Factory *ProductFactory = new Factory();
	Product *productObjA = ProductFactory->CreateProduct(TypeA);
	if (productObjA != NULL)
		productObjA->show();

	Product *productObjB = ProductFactory->CreateProduct(TypeB);
	if (productObjB != NULL)
		productObjB->show();

	Product *productObjC = ProductFactory->CreateProduct(TypeC);
	if (productObjC != NULL)
		productObjC->show();

	delete ProductFactory;
	ProductFactory = NULL;

	delete productObjA;
	productObjA = NULL;

	delete productObjB;
	productObjB = NULL;        

	delete productObjC;
	productObjC = NULL;

	return 0;
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值