<Head First 设计模式>:工厂模式1:方法模式--Pizza

来源:互联网 发布:mac 文件夹半透明 编辑:程序博客网 时间:2024/05/22 10:34


#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;}


0 0