设计模式--命令模式 C++实现
2014-04-23 17:22
651 查看
Head First 教材 ch6
#include<iostream> #include<string> using namespace std; #define num 2 class Light{ public: Light(string s); void on(); void off(); protected: string concretelight; }; class Stereo { public: Stereo(string s); void on(); void off(); void setCd(); void setDvd(); void setRadio(); void setVolum(int i); private: string constereo; }; class Command{ public: virtual void execute(){}; }; class noCommand:public Command { public: void execute(){}; }; class LightOnCommand:public Command{ public: LightOnCommand(Light &light); void execute(); private: Light *plighton; }; class LightOffCommand:public Command{ public: LightOffCommand(Light &light); void execute(); private: Light *plightoff; }; class StereoOnWithCDCommand:public Command { public: StereoOnWithCDCommand(Stereo &stereo); void execute(); private: Stereo *pstereo; }; class StereoOffCommand:public Command { public: StereoOffCommand(Stereo &stereo); void execute(); private: Stereo *pstereooff; }; class RemoteControl { public: RemoteControl(); void setCommand(int slot,Command &onCommand,Command &offCommand); void onButtonWasPressed(int slot); void offButtonWasPressed(int slot); void freememory(); private: Command *onCommands[num]; Command *offCommands[num]; }; Light::Light(string s) { concretelight=s; } void Light::on(){ cout<<concretelight<<"light is on"<<endl; } void Light::off(){ cout<<concretelight<<"Light is off"<<endl; } LightOnCommand::LightOnCommand(Light &light){ plighton=&light; } void LightOnCommand::execute(){ plighton->on(); } LightOffCommand::LightOffCommand(Light &light){ plightoff=&light; } void LightOffCommand::execute(){ plightoff->off(); } Stereo::Stereo(string s) { constereo=s; } void Stereo::on() { cout<<constereo<<" Stereo is on"<<endl; } void Stereo::off() { cout<<constereo<<" Stereo is off"<<endl; } void Stereo::setCd() { cout<<constereo<<" stereo is set for CD input"<<endl; } void Stereo::setDvd() { cout<<constereo<<" stereo is set for DVD input"<<endl; } void Stereo::setRadio() { cout<<constereo<<" stereo is ready for setradio"<<endl; } void Stereo::setVolum(int i) { cout<<constereo<<" stereo volume set to "<<i<<endl; } StereoOnWithCDCommand::StereoOnWithCDCommand(Stereo &stereo) { pstereo=&stereo; } void StereoOnWithCDCommand::execute() { pstereo->on(); pstereo->setCd(); pstereo->setVolum(11); } StereoOffCommand::StereoOffCommand(Stereo &stereo) { pstereooff=&stereo; } void StereoOffCommand::execute() { pstereooff->off(); } RemoteControl::RemoteControl() { noCommand nocommand; for(int i=0;i<num;i++) { onCommands[i]=new Command(); offCommands[i]=new Command(); } for(int i=0;i<num;i++) { onCommands[i]=&nocommand; offCommands[i]=&nocommand; } } void RemoteControl::setCommand(int slot,Command &onCommand,Command &offCommand) { onCommands[slot]=&onCommand; offCommands[slot]=&offCommand; } void RemoteControl::onButtonWasPressed(int slot) { onCommands[slot]->execute(); } void RemoteControl::offButtonWasPressed(int slot) { offCommands[slot]->execute(); } void RemoteControl::freememory() { delete[] onCommands; delete[] offCommands; } int main(){ Light light("Kitchen"); RemoteControl remotecontrol; LightOnCommand lighton=LightOnCommand(light); LightOffCommand lightoff=LightOffCommand(light); Stereo stereo("Living Room"); StereoOnWithCDCommand stereoOnWithCD(stereo); StereoOffCommand stereoOff(stereo); remotecontrol.setCommand(0,lighton,lightoff); remotecontrol.setCommand(1,stereoOnWithCD,stereoOff); remotecontrol.onButtonWasPressed(0); remotecontrol.offButtonWasPressed(0); remotecontrol.onButtonWasPressed(1); remotecontrol.offButtonWasPressed(1); remotecontrol.freememory(); return 0; }
命令的发出者与命令的执行者完全解耦
为指针数组分配内存不要忘记释放.
相关文章推荐
- 设计模式之命令模式 及 c++ 实现
- 我所理解的设计模式(C++实现)——命令模式(Command Pattern)
- 设计模式---命令模式(C++实现)
- 设计模式--命令实现C++
- 我所理解的设计模式(C++实现)——命令模式(Command Pattern)
- 设计模式C++实现十九:命令模式
- 最常用的设计模式---命令模式(C++实现)
- C++实现网络服务器命令模式(设计及模板实现)
- Head First 设计模式 (六) 命令模式(Command pattern) C++实现
- 设计模式C++实现(9)——命令模式
- 设计模式之命令模式,C++实现
- Head First 设计模式 (六) 命令模式(Command pattern) C++实现
- 设计模式-命令模式 C++实现
- 我所理解的设计模式(C++实现)——命令模式(Command Pattern)
- 设计模式---命令模式(C++实现)
- 设计模式系列3-----C++实现命令模式(Command Pattern)
- 设计模式--命令模式C++实现
- 设计模式C++实现(19)——命令模式
- 我所理解的设计模式(C++实现)——命令模式(Command Pattern)
- 设计模式 --> 命令模式(C++实现)