📄 command.cpp
字号:
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
class Command
{
public:
virtual void Execute() = 0;
virtual void Undo() = 0;
virtual void Off() = 0;
};
class Light
{
public:
virtual void On() = 0;
virtual void Off() = 0;
};
class ClassRoomLight : public Light
{
public:
virtual void On()
{
cout << "Class Room Light On!" << endl;
}
virtual void Off()
{
cout << "Class Room Light Off!" << endl;
}
};
class LivingRoomLight : public Light
{
public:
virtual void On()
{
cout << "LivingRoom Light on!" << endl;
}
virtual void Off()
{
cout << "LivingRoom Light Off" << endl;
}
};
class TV
{
public:
void On()
{
cout << "TV ON!" << endl;
}
void Off()
{
cout << "TV OFF!" << endl;
}
};
class TVOnCommand : public Command
{
public:
TVOnCommand(TV *t)
:tv(t)
{
}
virtual void Execute()
{
tv->On();
}
virtual void Undo()
{
tv->Off();
}
virtual void Off()
{
tv->Off();
}
private:
TV *tv;
};
class LightOnCommand : public Command
{
public:
LightOnCommand(Light *l)
:light(l)
{
}
virtual void Execute()
{
light->On();
}
virtual void Undo()
{
light->Off();
}
virtual void Off()
{
light->Off();
}
private:
Light *light;
};
class RemoteControl
{
public:
enum
{
COMMAND_NUM = 3
};
RemoteControl()
{
for (int i = 0; i < COMMAND_NUM; i++)
{
on[i] = 0;
off[i] = 0;
}
}
void SetCommand(Command* com, int slot)
{
assert(com != NULL && 0 <= slot && COMMAND_NUM > slot);
on[slot] = com;
off[slot] = com;
}
void OnButtonWasPressed(int slot)
{
assert(0 <= slot && COMMAND_NUM > slot);
if (on[slot] != 0)
{
on[slot]->Execute();
}
}
void OffButtonWasPressed(int slot)
{
assert(0 <= slot && COMMAND_NUM > slot);
if (off[slot] != 0)
{
off[slot]->Off();
}
}
~RemoteControl()
{
}
private:
Command* on[COMMAND_NUM];
Command* off[COMMAND_NUM];
};
int main()
{
RemoteControl rc;
///*
LivingRoomLight lrlight;
LightOnCommand lrcmd(&lrlight);
rc.SetCommand(&lrcmd, 0);
ClassRoomLight crlight;
LightOnCommand crcmd(&crlight);
rc.SetCommand(&crcmd, 1);
//*/
TV tv;
TVOnCommand tvcmd(&tv);
rc.SetCommand(&tvcmd, 2);
rc.OffButtonWasPressed(1);
rc.OnButtonWasPressed(2);
rc.OnButtonWasPressed(0);
rc.OffButtonWasPressed(0);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -