首先非常感谢睡仔:工厂模式,我的所有工厂模式的理解均来自于他的博客思想。
simplefactory.h
//设计模式之简单工厂模式
/*
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,由传入的参数决定创建那种类型的产品
优点:
1、解决了大量new的问题,
2、通过在类的内部创建对象,通常比直接创建对象更加灵活
缺点:
对修改不封闭,增加新产品时需要修改工厂(simplefactory)
理解:
如果你想吃饭了,怎么办自己做吗?自己做就相当于程序中直接使用new。当然是自己下个指令,别人来做更爽。
那就把做饭的任务交给你的老婆吧,那么她就是一个做饭的工厂了,你告诉她要要吃红烧肉,等会她就从厨房给
你端出来一盘香喷喷的红烧肉了,再来个清蒸鱼吧,大鱼大肉不能太多,那就再来个爆炒空心菜,最后再来个西红柿鸡蛋汤
显然到了这里,你是Client,你老婆就是工厂,她拥有做红烧肉的方法,做清蒸鱼的方法,做爆炒空心菜、
西红柿鸡蛋汤的方法,这些方法返回值就是食物抽象。红烧肉、清蒸鱼、爆炒空心菜、西红柿鸡蛋汤就是食物的继承类
*/
//定义产品类的基类
class product//cookfood
{
protected://控制不让用户直接实例化
product();
public:
virtual ~product();
virtual void cooking() = 0;//做菜的接口
};
//一下每个实例化,相当于生成一个类型的产品
//实例化具体实例A,可以理解成做红烧鱼
class concreteproductA :public product
{
public:
concreteproductA();
virtual ~concreteproductA();
virtual void cooking();//做菜
};
//实例化具体实例B,可以理解成做回锅肉
class concreteproductB :public product
{
public:
concreteproductB();
virtual ~concreteproductB();
virtual void cooking();//做菜
};
//simplefactory//相当于老婆
class simplefactory
{
public:
simplefactory();
~simplefactory();
public:
//根据需要生成哪个实例,做哪个菜
product *createproduct(int producttype);
product *createproductA();
product *createproductB();
};
simplefactory.cpp
#include"simplefactory.h"
#include <stdio.h>
product::product()
{
}
product::~product()
{
}
concreteproductA::concreteproductA()
{
printf("把老婆请过来准备做红烧鱼\n");
}
concreteproductA::~concreteproductA()
{
printf("老婆做完了红烧鱼,回去了\n");
}
void concreteproductA::cooking()
{
printf("老婆做了一份红烧鱼\n");
}
concreteproductB::concreteproductB()
{
printf("把老婆请过来准备做回锅肉\n");
}
concreteproductB::~concreteproductB()
{
printf("老婆做完了回锅肉,回去了\n");
}
void concreteproductB::cooking()
{
printf("老婆做了一份回锅肉\n");
}
simplefactory::simplefactory()
{
}
simplefactory::~simplefactory()
{
}
product* simplefactory::createproduct(int producttype)
{
product *p = NULL;
switch (producttype)
{
case 0:
p = new concreteproductA();
break;
case 1:
p = new concreteproductB();
break;
default:
p = new concreteproductA();
break;
}
return p;
}
product * simplefactory::createproductA()
{
product *p = new concreteproductA();
return p;
}
product * simplefactory::createproductB()
{
product *p = new concreteproductB();
return p;
}
int main()
{
simplefactory self;
//想吃红烧鱼了
product *productA = self.createproductA();
productA->cooking();
delete productA;
productA = NULL;
product *productB = self.createproductB();
productB->cooking();
delete productB;
productB = NULL;
return 0;
}
本文仅附上程序,理解的重点在simplefactory.h文件,主要看类之间的结构关系
另外,这篇博客介绍的非常好,仅供参考:http://blog.csdn.net/wuzhekai1985/article/details/6660462