java设计模式之命令模式

来源:互联网 发布:linux dd 备份u盘 编辑:程序博客网 时间:2024/06/16 11:15

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

命令模式类图:
这里写图片描述
下面我们来用命令模式来实现控制灯的开关。
类图:
这里写图片描述
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 onturn light offturn light offturn light on
0 0
原创粉丝点击