为什么我应该使用命令设计模式,而我可以很容易地调用所需的方法?[已关闭]
我正在研究命令设计模式,我对使用它的方式感到非常困惑。我拥有的示例与用于打开和关闭灯的远程控制类相关。
为什么我不应该使用Light类的switchOn()/switchOff()方法,而不是使用最终调用switchOn/switchOff方法的单独类和方法?
我知道我的例子很简单,但这就是重点。我无法在互联网上的任何地方找到任何复杂的问题来查看命令设计模式的确切用法。
如果您知道您可以使用此设计模式解决的任何复杂的现实世界问题,请与我分享。它帮助我和本文的未来读者更好地了解此设计模式的用法。谢谢
//Command
public interface Command {
public void execute();
}
//Concrete Command
public class LightOnCommand implements Command {
//Reference to the light
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
public void execute() {
light.switchOn(); //Explicit call of selected class's method
}
}
//Concrete Command
public class LightOffCommand implements Command {
//Reference to the light
Light light;
public LightOffCommand(Light light) {
this.light = light;
}
public void execute() {
light.switchOff();
}
}
//Receiver
public class Light {
private boolean on;
public void switchOn() {
on = true;
}
public void switchOff() {
on = false;
}
}
//Invoker
public class RemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
//Client
public class Client {
public static void main(String[] args) {
RemoteControl control = new RemoteControl();
Light light = new Light();
Command lightsOn = new LightsOnCommand(light);
Command lightsOff = new LightsOffCommand(light);
//Switch on
control.setCommand(lightsOn);
control.pressButton();
//Switch off
control.setCommand(lightsOff);
control.pressButton();
}
}
为什么我不能轻易地使用如下代码?
Light light = new Light();
switch(light.command) {
case 1:
light.switchOn();
break;
case 2:
light.switchOff();
break;
}