设计模式3-Factory模式

来源:互联网 发布:跨数据库关联查询 编辑:程序博客网 时间:2024/05/16 09:28

 /**********************************************************************************************************************/
* Factory模式工厂模式
* 我们可以将Factory理解成生产制造模式,即给定一个特定值(字符串/ 枚举), 产生不同子类的对象

* 意图: 通过一个统一的接口, 产生一系列的子类的对象
* 适用性: 产生一系列对象, 这些对象具有某些相同属性和行为,即可抽象出一个父类; 
/**********************************************************************************************************************/

下面的例子是一个水果的工厂模式

#include <stdio.h>

class CFruit //父类
{
public:
 virtual void What() = 0;
};

class CApple : public CFruit  //子类1
{
public:
 virtual void What()
 {
  printf("我是一个苹果\n");
 }
};

class CPear : public CFruit //子类2
{
public:
 virtual void What()
 {
  printf("我是一只雪梨\n");
 }
};

class CBanana : public CFruit  //子类3
{
public:
 virtual void What()
 {
  printf("我是一条香蕉\n");
 }
};


enum eFruitType{APPLE=1, PEAR, BANANA};

class CFruitFactory  //工厂模式-----类的统一产生接口类
{
public:
 CFruit *GetFruitInstance(eFruitType type)   //产生函数接口
 {
  printf("工厂正在生产水果...\n");
  switch(type)
  {
  case APPLE:
   return new CApple();
  case PEAR:
   return new CPear();
  case BANANA:
   return new CBanana();
  default:
   return NULL;
  }
 }
};


int main()
{
 CFruitFactory factory;
 CFruit *fruit;
 
 printf("你想吃什么水果?\n");
 printf("1 苹果, 2 雪梨, 3 香蕉\n");
 int nType = 0;
 scanf("%d", &nType);
 fruit = factory.GetFruitInstance(eFruitType(nType));
 if(fruit == NULL)
 {
  printf("没有这种水果。");
  return 0;
 }
 fruit->What();

 return 0;
}

 

 

原创粉丝点击