simple factory(简单工厂)
来源:互联网 发布:在淘宝抢手机怎么最快 编辑:程序博客网 时间:2024/05/22 07:55
简单工厂,不是一种模式
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;
}
- simple factory(简单工厂)
- 简单工厂(Simple Factory)
- 简单工厂模式(Simple Factory)
- 简单工厂模式(Simple Factory)
- 简单工厂模式(Simple Factory)
- Simple Factory 简单工厂模式
- 简单工厂模式(Simple Factory)
- 简单工厂模式(simple factory)
- 简单工厂模式/Simple Factory
- Simple Factory (简单工厂模式)
- 简单工厂模式(Simple Factory)
- Simple Factory 简单工厂模式
- 烹饪,简单工厂(Simple Factory)
- 简单工厂( Simple Factory )模式
- 简单工厂模式(Simple Factory)
- 简单工厂模式(Simple Factory)
- 简单工厂模式(Simple Factory)
- 简单工厂模式 Simple Factory
- 无线网络领域国际会议/期刊排名
- XMLHttpRequest详情之GET和POST(二)
- python 2 & python 3
- 我大学剩下一年半的生活(十六)——pythonchallenge之level15
- Linux内核信号处理机制介绍
- simple factory(简单工厂)
- JQuery 实现二级下拉菜单
- Android 2.3 SD卡挂载流程浅析(六)
- 监听键盘
- JQuery基本选择器
- gpio函数
- xstream:Invalid byte 2 of 2-byte UTF-8 sequence
- Android 2.3 SD卡挂载流程浅析(七)
- 。