您的位置:首页 > 编程语言 > C语言/C++

C++ 简单工厂模式

2013-08-06 00:09 447 查看
假设有如下的场景: 

 卖pizza的, 可以有很多种pizza(CheesePizza, GreekPizza, PepperoniPizza),我们该如何处理它呢,当然我们可以声明一个类,类中创建每一个种类的pizza。但是这样有什么问题吗?我们没有把需要改变的部分剥离出来。

软件设计的一个原则就是“是易于扩充而不是修改”,另一个是“对接口编程而不是对实现编程”。 这里就轮到工厂模式出手了。 

工厂模式有三种:

简单工厂

抽象工厂

工厂方法

下面是简单工厂模式

#include <iostream>
#include <windows.h>
#include <memory>

using namespace std;

class Pizza
{
public:
Pizza(){};
virtual ~Pizza(){};

virtual void MakePizza()=0;
};

class CheesePizza:public Pizza
{
public:
CheesePizza(){};
~CheesePizza(){};

void MakePizza()
{
cout<<"Make Cheese Pizza"<<endl;
}
};

class GreekPizza:public Pizza
{
public:
GreekPizza(){};
~GreekPizza(){};

void MakePizza()
{
cout<<"Make Greek Pizza"<<endl;
}
};

class	PepperoniPizza:public Pizza
{
public:
PepperoniPizza(){};
~PepperoniPizza(){};

void MakePizza()
{
cout<<"Make Pepperoni Pizza"<<endl;
}
};

enum PIZZA_TYPE
{
PIZZA_TYPE_CHEESE=0,
PIZZA_TYPE_GREEK,
PIZZA_TYPE_PEPPERONI
};

class PizzaFactory
{
public:
PizzaFactory(){};
~PizzaFactory(){};

static shared_ptr<Pizza> createPizza(PIZZA_TYPE pizzaType)
{
switch (pizzaType)
{
case PIZZA_TYPE_CHEESE:
return shared_ptr<Pizza> (new CheesePizza());
case PIZZA_TYPE_GREEK:
return shared_ptr<Pizza>(new GreekPizza());
case PIZZA_TYPE_PEPPERONI:
return shared_ptr<Pizza>(new PepperoniPizza());
default:
return shared_ptr<Pizza>(new PepperoniPizza());
}
}
};

int main(int argc,char* argv[])
{
shared_ptr<Pizza> cheesePizza=PizzaFactory::createPizza(PIZZA_TYPE_CHEESE);
shared_ptr<Pizza> greekPizza=PizzaFactory::createPizza(PIZZA_TYPE_GREEK);
shared_ptr<Pizza> pepperoniPizza=PizzaFactory::createPizza(PIZZA_TYPE_PEPPERONI);

cheesePizza->MakePizza();
greekPizza->MakePizza();
pepperoniPizza->MakePizza();

system("pause");
return 0;

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: