C++设计模式_命令模式练习代码

C++设计模式_命令模式练习代码,自己写的简单的一个代码,留着以后备忘。

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>
#include <list>

using namespace std;

// 烤串师傅
class Cooker {
public:
	void makeChicken() {
		cout << "烤串师傅 烤了 鸡肉" << endl;
	}
	void makeChuaner() {
		cout << " 烤串师傅 烤了 羊肉串 " << endl;
	}
};

//抽象的命令
class Command {
public:
	Command(Cooker *cooker) {
		this->cooker = cooker;
	}

	~Command() {
		if (this->cooker != NULL) {
			delete cooker;
		}
	}

	//菜单的执行命令
	virtual void execute() = 0;

protected:
	Cooker* cooker;
};
//具体的 羊肉串命令
class CommandChuaner:public Command {
public:
	CommandChuaner(Cooker *cooker) : Command(cooker) {}

	//菜单的执行命令
	virtual void execute() {
		this->cooker->makeChuaner();
	}
};
//具体的 鸡肉命令
class CommandChicken :public Command {
public:
	CommandChicken(Cooker *cooker) : Command(cooker) {}

	//菜单的执行命令
	virtual void execute() {
		this->cooker->makeChicken();
	}
};
class Waitress {
public:
	Waitress() {
		cmd_list.clear();
	}
	//添加命令的方法
	void setCmd(Command * cmd) {
		this->cmd_list.push_back(cmd);
	}
	//批量执行命令
	void notify() {
		for (list<Command* >::iterator it = cmd_list.begin(); it != cmd_list.end(); it++) {
			(*it)->execute();
		}
	}
private:
	list<Command* > cmd_list;
};

int main(void)
{
	Waitress *mm = new Waitress;

	//点餐
	Command *cmdChuaner = new CommandChuaner(new Cooker);
	Command *cmdChicken = new CommandChicken(new Cooker);

	mm->setCmd(cmdChicken);
	mm->setCmd(cmdChuaner);
	//下单
	mm->notify();
	delete mm;
	return 0;
}

 

暂无评论

发表评论