行为型模式之命令模式

#include<iostream>
#include<list>
using namespace std;

class Doctor
{
public:
	void treatEye()
	{
		cout << "Treat Eye" << endl;
	}
	void treatNose()
	{
		cout << "Treat Nose" << endl;
	}
};

class Command
{
public:
	Command(Doctor*doctor)
	{
		m_doctor = doctor;
	}
	virtual void treat() = 0;
protected:
	Doctor*m_doctor;

};

class CommandTreat_Eye:public Command
{
public:
	CommandTreat_Eye(Doctor *doctor) :Command(doctor){}
	virtual void treat()
	{
		m_doctor->treatEye();
	}
};

class CommandTreat_Nose :public Command
{
public:
	CommandTreat_Nose(Doctor *doctor) :Command(doctor){}
	virtual void treat()
	{
		m_doctor->treatNose();
	}
};

//护士只能一个一个处理病例
class Nurse
{
public:
	Nurse(Command*command)
	{
		m_command = command;
	}
	void submittedCaseCommand()
	{
		m_command->treat();
	}
private:
	Command*m_command;
};

//护士长可以批量处理病例
class AdvNurse
{
public:
	AdvNurse()
	{
		m_list.clear();
	}

	void setCommand(Command*command)
	{
		m_list.push_back(command);
	}

	void summittedCaseCommand()
	{
		for (list<Command*>::iterator it = m_list.begin(); it != m_list.end(); it++)
		{
			(*it)->treat();
		}
	}
private:
	list<Command*>m_list;
};


//护士值班
void main01()
{
	Doctor *doctor = NULL;
	Nurse *nurse = NULL;
	Command *command1 = NULL;
	Command *command2 = NULL;

	doctor = new Doctor;
	command1 = new CommandTreat_Eye(doctor);
	command2 = new CommandTreat_Nose(doctor);

	nurse = new Nurse(command1);
	nurse->submittedCaseCommand();
	delete nurse;
	delete command1;

	nurse = new Nurse(command2);
	nurse->submittedCaseCommand();
	delete nurse;
	delete command2;

	delete doctor;
}

//护士长值班
void main02()
{
	Doctor *doctor = NULL;
	AdvNurse *advnurse = NULL;
	Command *command1 = NULL;
	Command *command2 = NULL;

	doctor = new Doctor;
	command1 = new CommandTreat_Eye(doctor);
	command2 = new CommandTreat_Nose(doctor);

	advnurse = new AdvNurse;
	advnurse->setCommand(command1);
	advnurse->setCommand(command2);

	advnurse->summittedCaseCommand();

	delete advnurse;
	delete command1;
	delete command2;

	delete doctor;
}

void main()
{
	main02();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值