C++:设计模式之工厂方法模式(例子)

// 设计模式测试.cpp : 定义控制台应用程序的入口点。
// 工厂方法模式

#include "stdafx.h"
#include <string>
#include <iostream>
#include <vector>
#include <list>

using namespace std;
/*********************工厂方法模式之Pizza示例*************************************/
//披萨产品基类
class Pizza
{
protected:
	string name;
	string dough;
	string sauce;
public:
	void prepare(){
		cout << "pizza is prepared" << endl;
	}
	void bake() {
		cout << "pizza is baked" << endl;
	}
	void cut() {
		cout << "pizza is cut" << endl;
	}
	void box() {
		cout << "pizza is boxed" << endl;
	}
	string getName() {
		return name;
	}
};
class FirstPizza:public Pizza
{
public:
	FirstPizza() {
		name = "First Pizza";
		dough = "Thin Crust Dough";
		sauce = "First Sauce";
	}
}; 
class SecondPizza :public Pizza
{
public:
	SecondPizza() {
		name = "Second Pizza";
		dough = "Crust Dough";
		sauce = "Second Sauce";
	}
}; 
class ThirdPizza :public Pizza
{
public:
	ThirdPizza() {
		name = "Third Pizza";
		dough = "Command Dough";
		sauce = "Command Sauce";
	}
};
class FourthPizza :public Pizza
{
public:
	FourthPizza() {
		name = "Fourth Pizza";
		dough = "Command Dough";
		sauce = "Command Sauce";
	}
};
class CommandPizza :public Pizza
{
public:
	CommandPizza() {
		name = "Command Pizza";
		dough = "Command Dough";
		sauce = "Command Sauce";
	}
};
//披萨工厂
class PizzaStore
{
protected:
	virtual Pizza* createPizza(string type)=0;
public:
	Pizza* OrderPizza(string type) {
		Pizza *pizza;
		pizza = createPizza(type);
		pizza->prepare();
		pizza->bake();
		pizza->cut();
		pizza->box();
		return pizza;
	}
};
class APizzaStore:public PizzaStore
{
public:
	Pizza* createPizza(string type) {
		if (type == "1") {
			return new FirstPizza();
		}
		else if (type == "3"){
			return new ThirdPizza();
		}
		else {
			return new FourthPizza();
		}
	};
};
class BPizzaStore :public PizzaStore
{
public:
	Pizza* createPizza(string type) {
		if (type == "2") {
			return new SecondPizza();
		}
		else if (type == "3") {
			return new ThirdPizza();
		}
		else {
			return new CommandPizza();
		}
	};
};
//主函数
int main()
{	
	PizzaStore *aStore = new APizzaStore();
	PizzaStore *bStore = new BPizzaStore();
	Pizza *pizza = aStore->OrderPizza("1");
	cout << "get a " << pizza->getName() << " from " << "aStore" << endl;
	pizza = aStore->OrderPizza("3");
	cout << "get a " << pizza->getName() << " from " << "aStore" << endl;
	pizza = bStore->OrderPizza("2");
	cout << "get a " << pizza->getName() << " from " << "bStore" << endl;
	pizza = bStore->OrderPizza("1");
	cout << "get a " << pizza->getName() << " from " << "bStore" << endl;
	system("Pause");
	return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值