simple factory(简单工厂)

简单工厂,不是一种模式

head first design pattern第四章  简单工厂的 C++实现。

 

 

Pizza.h

 

#ifndef DEF_PIZZA_H_
#define DEF_PIZZA_H_

typedef enum
{
 kCheesePizza,
 kVeggiePizza,
 kCalmPizza
} Enum_PizzaType;

//比萨
class CPizza
{
public:
 //准备
 virtual void Prepare();
 //烘烤
 virtual void Bake();
 //切
 virtual void Cut();
 //包装
 virtual void Box();
};
//奶酪比萨
class CCheesePizza : public CPizza
{
public:
 //准备
 virtual void Prepare();
 //烘烤
 virtual void Bake();
 //切
 virtual void Cut();
 //包装
 virtual void Box();
};
//素比萨
class CVeggiePizza : public CPizza
{
public:
 //准备
 virtual void Prepare();
 //烘烤
 virtual void Bake();
 //切
 virtual void Cut();
 //包装
 virtual void Box();
};

//蛤比萨
class CClamPizza : public CPizza
{
public:
 //准备
 virtual void Prepare();
 //烘烤
 virtual void Bake();
 //切
 virtual void Cut();
 //包装
 virtual void Box();
};
#endif

 

///pizza.cpp

 

#include "stdafx.h"
#include "Pizza.h"
#include <iostream>

void CPizza::Bake()
{
 std::cout<<"CPizza::Bake"<<std::endl;
}

void CPizza::Box()
{
 std::cout<<"CPizza::Box"<<std::endl;

}

void CPizza::Cut()
{
 std::cout<<"CPizza::Cut"<<std::endl;

}

void CPizza::Prepare()
{
 std::cout<<"CPizza::Prepare"<<std::endl;

}


void CCheesePizza::Bake()
{
 std::cout<<"CCheesePizza::Bake"<<std::endl;
}

void CCheesePizza::Box()
{
 std::cout<<"CCheesePizza::Box"<<std::endl;

}

void CCheesePizza::Cut()
{
 std::cout<<"CCheesePizza::Cut"<<std::endl;

}

void CCheesePizza::Prepare()
{
 std::cout<<"CCheesePizza::Prepare"<<std::endl;

}

void CVeggiePizza::Bake()
{
 std::cout<<"CVeggiePizza::Bake"<<std::endl;
}

void CVeggiePizza::Box()
{
 std::cout<<"CVeggiePizza::Box"<<std::endl;

}

void CVeggiePizza::Cut()
{
 std::cout<<"CVeggiePizza::Cut"<<std::endl;

}

void CVeggiePizza::Prepare()
{
 std::cout<<"CVeggiePizza::Prepare"<<std::endl;

}


void CClamPizza::Bake()
{
 std::cout<<"CClamPizza::Bake"<<std::endl;
}

void CClamPizza::Box()
{
 std::cout<<"CClamPizza::Box"<<std::endl;

}

void CClamPizza::Cut()
{
 std::cout<<"CClamPizza::Cut"<<std::endl;

}

void CClamPizza::Prepare()
{
 std::cout<<"CClamPizza::Prepare"<<std::endl;

}

 

SimplePizzaFactory.h

#ifndef DEF_SIMPLE_PIZZA_FACTORY_H_
#define DEF_SIMPLE_PIZZA_FACTORY_H_

#include "Pizza.h"

class CSimplePizzaFactory
{
public:
 CPizza* CreatePizza(Enum_PizzaType aoPizzaType);
};

#endif

 

//SimplePizzaFactory.cpp

#include "stdafx.h"
#include "SimplePizzaFactory.h"

CPizza* CSimplePizzaFactory::CreatePizza(Enum_PizzaType aoPizzaType)
{
 switch(aoPizzaType)
 {

 case kCheesePizza:
  {
   return new CCheesePizza;
   break;
  }
 case kVeggiePizza:
  {
   return new CVeggiePizza;
   break;
  }
 case kCalmPizza:
  {
   return new CClamPizza;
   break;
  }
 }
 return NULL;
}

PizzaStore.h

#ifndef  DEF_PIZZA_STORE_H_
#define  DEF_PIZZA_STORE_H_

#include "SimplePizzaFactory.h"

class CPizzaStore
{
public:
 CPizzaStore();
 void OrderPizza(Enum_PizzaType aoPizzaType);
protected:
 CSimplePizzaFactory m_oPizzaFactory;
};

#endif

///PizzaStore.cpp

#include "stdafx.h"
#include "PizzaStore.h"
#include <assert.h>

CPizzaStore::CPizzaStore()
{
 
}

void CPizzaStore::OrderPizza(Enum_PizzaType aoPizzaType)
{
  CPizza *lpPizza = NULL;
  lpPizza = m_oPizzaFactory.CreatePizza(aoPizzaType);
  assert(lpPizza);
  if (NULL == lpPizza)
  {
   return;
  }
  lpPizza->Prepare();
  lpPizza->Box();
  lpPizza->Cut();
  lpPizza->Box();
  
  delete lpPizza;
  lpPizza = NULL;
}

 

///main.cpp


#include "stdafx.h"
#include <iostream>

#include "PizzaStore.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
 CPizzaStore loPizzaStore;

 for (int liIndex = kCheesePizza; liIndex <= kCalmPizza; liIndex++)
 {
  loPizzaStore.OrderPizza((Enum_PizzaType)liIndex);
 }

 return 0;
}

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值