23种设计模式之命令模式(行为型,2 Command,c++实现)
代码实现:
#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:
virtual void treat() = 0;
};
class TreatEyeCommand : public Command
{
public:
TreatEyeCommand(Doctor* doctor)
{
this->doctor = doctor;
}
void treat()
{
doctor->treatEye();
}
private:
Doctor* doctor;
};
class TreatNoseCommand : public Command
{
public:
TreatNoseCommand(Doctor* doctor)
{
this->doctor = doctor;
}
void treat()
{
doctor->treatNose();
}
private:
Doctor* doctor;
};
class Nurse
{
public:
void addCommand(Command* command)
{
_list.push_back(command);
}
void submitCases()
{
for (list<Command*>::iterator it = _list.begin(); it != _list.end(); it++)
{
(*it)->treat();
}
}
private:
list<Command*> _list;
};
void main()
{
/*
Doctor* doctor = new Doctor;
doctor->treatEye();
delete doctor;
*/
/*
Doctor* doctor = new Doctor;
TreatEyeCommand* treatEyeCommand = new TreatEyeCommand(doctor);
treatEyeCommand->treat();
delete treatEyeCommand;
TreatNoseCommand* treatNoseCommand = new TreatNoseCommand(doctor);
treatNoseCommand->treat();
delete treatNoseCommand;
delete doctor;
*/
Doctor* doctor = new Doctor;
Command* command1 = new TreatEyeCommand(doctor);
Command* command2 = new TreatNoseCommand(doctor);
Nurse* nurse = new Nurse;
nurse->addCommand(command1);
nurse->addCommand(command2);
nurse->submitCases();
delete nurse;
delete command2;
delete command1;
delete doctor;
}