假设我们现在有一个遥控器,但是现在我们想用这一个遥控器去控制房间所有的电器,假设每个电器最多有四个操作,而且遥控器上只有5或者6个按钮,怎么办呢
命令模式给了我们一个解决思路
首先我们需要一个命令接口
Interface ICommand()
{
excute();
unexcute();
}
然后我们可以将所有电器的Command实现这个接口,例如
LightCommand implements ICommand()
{
Light light;
...//忽略构造方法,将具体的light传入
excute(){this.light.on();this.light,electric() ;//这里可以是一系列琐碎命令的集合}
//命令模式的精髓,封装一系列命令到一个方法,调用者(遥控器)的角度只看到调用了一个命令,其实真正执行命令在这里
unexcute(){this.light.off();///这里可以是一系列琐碎命令的集合}
}
命令具体的传入电器
class Light()
{
electric() {...}
on() {...}
off() {...}
}
当然我们还需要一个遥控器
class Invoker()
{
ICommand lightCommand;
ICommand cookerCommand;
...//一系列命令
//构造方法,将具体命令传入
excute(this.lightCommand.excute()); //注意这里执行了lightCommand命令中的一系列命令
}
这就是命令模式了,将一系列的命令封装起来供调用者调用。
记住,命令模式的精髓在于封装方法