Я изучаю шаблон дизайна , и я совершенно смущен тем, как его использовать. Пример, который у меня есть, связан с классом удаленного управления, который используется для включения и выключения подсветки.
Почему я не должен использовать методы switchOn()/switchOff() класса Light, а не отдельные классы и методы, которые в конечном итоге вызывают методы 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 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;
}