java设计模式之命令模式

    xiaoxiao2021-03-26  20

    命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

    命令模式类图: 下面我们来用命令模式来实现控制灯的开关。 类图: RemoteLoader来下发开/关灯的命令,RemoteControl来设置要调用的接口是LightOnCommand/LightOffCommand,最后由Light对象来实现具体的命令。

    Light类代码实现:

    public class Light { public void on(){ System.out.println("turn light on"); } public void off(){ System.out.println("turn light off"); } }

    Command接口代码实现:

    public interface Command { public void execute(); public void undo(); }

    LightOnCommand类代码实现:

    public class LightOnCommand implements Command{ Light light; public LightOnCommand(Light light){ this.light = light; } @Override public void execute() { // TODO Auto-generated method stub light.on(); } @Override public void undo() { // TODO Auto-generated method stub light.off(); } }

    LightOffCommand类代码实现:

    public class LightOffCommand implements Command{ Light light; public LightOffCommand(Light light){ this.light = light; } @Override public void execute() { // TODO Auto-generated method stub light.off(); } @Override public void undo() { // TODO Auto-generated method stub light.on(); } }

    RemoteControl类代码实现:

    public class RemoteControl { Command command; public void setCommand(Command command){ this.command = command; } public void buttonWasPushed(){ command.execute(); } public void undoButtonWasPushed(){ command.undo(); } }

    RemoteLoader类代码实现:

    public class RemoteLoader { public static void main(String[] args){ Light light = new Light(); Command lightOnCommand = new LightOnCommand(light); Command lightOffCommand = new LightOffCommand(light); RemoteControl remoteControl = new RemoteControl(); remoteControl.setCommand(lightOnCommand); remoteControl.buttonWasPushed(); remoteControl.undoButtonWasPushed(); remoteControl.setCommand(lightOffCommand); remoteControl.buttonWasPushed(); remoteControl.undoButtonWasPushed(); } }

    运行结果:

    turn light on turn light off turn light off turn light on
    转载请注明原文地址: https://ju.6miu.com/read-658909.html

    最新回复(0)