一头扎进设计模式-命令模式

来源:互联网 发布:java全栈开发工程师 编辑:程序博客网 时间:2024/03/29 18:33

定义:命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

用自己的话说:把真正操作的实体封装到命令里面,通过命令对实体进行真正的操作。

代码:
定义一个真正操作的实体类:

public class GarageDoor {    public void up(){        System.out.println("升门");    }    public void down(){        System.out.println("降门");    }    public void stop(){        System.out.println("门停");    }    public void lightOn(){        System.out.println("开灯");    }    public void lightOff(){        System.out.println("关灯");    }}

定义一个命令接口:

public interface Command {    public void execute();}

定义一个命令的实现:

public class GarageDoorOpenCommand implements Command {    private GarageDoor garageDoor;    /**     *      */    public GarageDoorOpenCommand(GarageDoor garageDoor) {        //         this.garageDoor=garageDoor;    }    /* (非 Javadoc)     * @see com.jjt.command.Command#execute()     */    @Override    public void execute() {        // TODO 自动生成的方法存根        this.garageDoor.lightOn();        this.garageDoor.up();        this.garageDoor.stop();        this.garageDoor.down();        this.garageDoor.lightOff();    }}

定义一个命令执行者,在这里,我模拟定义了一个遥控器:

public class SimpleRemoteControl {    private Command slot;    /**     *      */    public SimpleRemoteControl() {        // TODO 自动生成的构造函数存根    }    public void setCommand(Command command){        slot=command;    }    public void buttoWasPressed(){        slot.execute();    }}

测试:

    public static void main(String[] args){        SimpleRemoteControl remote = new SimpleRemoteControl();//实际执行的调用者        GarageDoor garageDoor = new GarageDoor();//实际的执行者        GarageDoorOpenCommand garaDoorOpenCommand = new GarageDoorOpenCommand(garageDoor);//创建一个命令        remote.setCommand(garaDoorOpenCommand);//把命令交给遥控器管理        remote.buttoWasPressed();//使用遥控器    }

结果:

开灯升门门停降门关灯
0 0
原创粉丝点击