Chinaunix首页 | 论坛 | 博客
  • 博客访问: 199789
  • 博文数量: 47
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1259
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-24 10:20
文章分类
文章存档

2014年(21)

2013年(26)

分类: C/C++

2014-04-01 10:08:06

工厂模式就是将一组有相同方法行为的类放在一起生成。通过工厂类可以确定要生成哪一个对象。与

此同时可以延迟对象生成,方便后续扩展和维护。

 

具体工厂类的抽象基类,定义了具体工厂类都实现的抽象方法。
   
class CFood
{
public:
virtual ~CFood(){};
//所有工厂类都要实现的同一接口方法
virtual void MakeFood() = 0;
protected:
CFood(){};
};

 

 

具体工厂类,实现了抽象工厂类的共同接口

 
   
#ifndef CAppleH
#define CAppleH
#include
#include "CFood.h"
using namespace std;
//---------------------------------------------------------------------------
class CApple:public CFood
{
public:
CApple(){};
~CApple(){};
void MakeFood(){cout<<"I make apple"< private:
};
#endif
   
#ifndef CBananaH
#define CBananaH
//---------------------------------------------------------------------------
#include
#include "CFood.h"
using namespace std;
//---------------------------------------------------------------------------
class CBanana:public CFood
{
public:
CBanana(){};
~CBanana(){};
void MakeFood(){cout<<"I make Banana"< private:
};
#endif

 

 

工厂方法类,决定要实例化哪一个具体类
   
//---------------------------------------------------------------------------
#ifndef CFactoryClassH
#define CFactoryClassH
//---------------------------------------------------------------------------
#include "CApple.h"
#include "CBanana.h"
enum{apple,banana} FoodType;
class CFactoryClass
{
public:
CFactoryClass(){};
~CFactoryClass(){};
CFood* MakeFood(enum FoodType eFoodType)
{
CFood *pCFood = NULL;
switch(eFoodType)
{
case apple:
pCFood = new CApple();
break;
case banana:
pCFood = new CBanana();
break;
default:
return NULL;
}
return pCFood;
}
} ;
#endif

 

 

测试代码
   
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#include "CFactoryClass.h"
int main(int argc, char* argv[])
{
CFactoryClass tCFactoryClass;
CFood *pCFood = NULL;
pCFood = tCFactoryClass.MakeFood(apple);
pCFood->MakeFood();
if(NULL != pCFood)
{
delete pCFood;
}
pCFood = tCFactoryClass.MakeFood(banana);
pCFood->MakeFood();
if(NULL != pCFood)
{
delete pCFood;
}
char c = getchar();
c = getchar();
return 0;
}
阅读(1771) | 评论(0) | 转发(0) |
0

上一篇:kerberos的tgt时间理解

下一篇:没有了

给主人留下些什么吧!~~