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

大话设计模式——模板方法模式(C++点菜实现)

2014-06-05 21:02 435 查看
模板方法模式是把不变的代码移到超类中,去除子类中的重复代码。 只把动态改变的地方交给子类多态去实现。

代码如下,基类是固定的菜谱,子类实现了A和B各点多少份菜。 A B不关心菜谱有什么,只关心自己应该点多少份。

class Menu
{
public:
	Menu();
	~Menu();
	void OrderPork(){
		std::cout << "红烧肉:" << getPorkNum() << "份" << std::endl;
	}
	void OrderPotato(){
		std::cout << "土豆泥:" << getPotatoNum() << "份" << std::endl;
	}
	void OrderFish(){
		std::cout << "水煮鱼:" << getFishNum() << "份" << std::endl;
	}
	virtual int getPorkNum(){
		return 0;
	}
	virtual int getPotatoNum(){
		return 0;
	}
	virtual int getFishNum(){
		return 0;
	}
};


#include "Menu.h"
class MenuPersonA :
	public Menu
{
public:
	MenuPersonA();
	~MenuPersonA();
	 int getPorkNum (){
		return 3;
	}
	int getPotatoNum (){
		return 4;
	}
	 int getFishNum(){
		return 5;
	}
};


#include "Menu.h"
class MenuPersonB :
	public Menu
{
public:
	MenuPersonB();
	~MenuPersonB();
	int getPorkNum() override{
		return 4;
	}

	 int getPotatoNum()override{
		return 1;
	}
	 int getFishNum()override{
		return 2;
	}
};


客户端调用:

int _tmain(int argc, _TCHAR* argv[])
{
	Menu *PersonA = new MenuPersonA();
	Menu *PersonB = new MenuPersonB();

	PersonA->OrderFish();
	PersonA->OrderPork();
	PersonA->OrderPotato();
	PersonB->OrderFish();
	PersonB->OrderPork();
	PersonB->OrderPotato();

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