Vulkan

:工厂模式1:方法模式--Pizza


#ifndef __PIZZA_H__
#define __PIZZA_H__
class Pizza
{
public:
	Pizza(){}
	virtual ~Pizza(){}
	virtual const char* getPizzaName()
	{
		return "Pizza";
	}
};



class NYCheesePizza : public Pizza
{
public:
	NYCheesePizza(){}
	virtual~NYCheesePizza(){}
	virtual const char* getPizzaName()
	{
		return "NYCheesePizza";
	}
};

class NYClamPizza : public Pizza
{
public:
	NYClamPizza(){}
	virtual~NYClamPizza(){}
	virtual const char* getPizzaName()
	{
		return "NYClamPizza";
	}
};

class NYVeggiePizza : public Pizza
{
public:
	NYVeggiePizza(){}
	virtual~NYVeggiePizza(){}
	virtual const char* getPizzaName()
	{
		return "NYVeggiePizza";
	}
};



class ChicagoVeggiePizza : public Pizza
{
public:
	ChicagoVeggiePizza(){}
	virtual~ChicagoVeggiePizza(){}
	virtual const char* getPizzaName()
	{
		return "ChicagoVeggiePizza";
	}
};

class ChicagoClamPizza : public Pizza
{
public:
	ChicagoClamPizza(){}
	virtual~ChicagoClamPizza(){}
	virtual const char* getPizzaName()
	{
		return "ChicagoClamPizza";
	}
};

class ChicagoCheesePizza : public Pizza
{
public:
	ChicagoCheesePizza(){}
	virtual~ChicagoCheesePizza(){}
	virtual const char* getPizzaName()
	{
		return "ChicagoCheesePizza";
	}
};

#endif

#ifndef __PIZZASTORE_H__
#define __PIZZASTORE_H__
#include "Pizza.h"
#include <iostream>
using namespace std;
class PizzaStore
{
public:
	PizzaStore()
	{
	}
	virtual~PizzaStore(){}
	virtual  Pizza* OrderPizza(const char* style)
	{
		Pizza *p = CreatePizza(style);
		cout<<p->getPizzaName()<<endl;
		return p;
	}
private:
	virtual Pizza* CreatePizza(const char* style) = 0
	{

	}
};

class NYPizzaStore :public PizzaStore
{
public:
	NYPizzaStore(){}
	virtual ~NYPizzaStore(){}
private:
	virtual Pizza* CreatePizza(const char* style)
	{
		Pizza *p;
		if (style == "Cheese")
		{
			p = new NYCheesePizza();
		}
		else if (style == "Clam")
		{
			p = new NYClamPizza();
		}
		else if (style =="Veggie")
		{
			p = new NYVeggiePizza();
		}
		else p = NULL;
		return p;
	}
};

class ChicagoPizzaStore :public PizzaStore
{
public:
	ChicagoPizzaStore(){}
	virtual ~ChicagoPizzaStore(){}
private:
	virtual Pizza* CreatePizza(const char* style)
	{
		Pizza *p;
		if (style == "Cheese")
		{
			p = new ChicagoCheesePizza();
		}
		else if (style == "Clam")
		{
			p = new ChicagoClamPizza();
		}
		else if (style == "Veggie")
		{
			p = new ChicagoVeggiePizza();
		}
		else p = NULL;
		return p;
	}
};

#endif
#include "Pizza.h"

#include <iostream>
#include "PizzaStore.h"
using namespace std;
int main()
{
	cout << "OK" << endl;
	PizzaStore *n = new NYPizzaStore();
	Pizza *p = n->OrderPizza("Cheese");
	p = n->OrderPizza("Clam");

	n = new ChicagoPizzaStore();
	p = n->OrderPizza("Cheese");
	p = n->OrderPizza("Clam");
	return 0;
}


posted on 2015-04-20 23:02  Vulkan  阅读(203)  评论(0编辑  收藏  举报

导航