命令模式

来源:互联网 发布:淘宝玩具有什么 编辑:程序博客网 时间:2024/06/05 20:54

命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也可支持撤销的操作。
这里写图片描述
命令模式可将”动作的请求者”从”动作的执行者”对象中解耦。
这里写图片描述
需求实例:遥控器控制点灯的开关。
1、创建一个命令
客户负责创建命令对象(开灯)。让所有的命令对象实现相同的包含一个方法的接口。

public interface Command {    public void execute();}

针对具体的命令对象,需要有一个被这个命令控制的实体,让该实体成为命令的接受者,执行命令的操作。

public class LightOnCommand implements Command {    //命令的接受者,否则具体的实施    Light light;    public LightOnCommand(Light light){        this.light=light;    }    public void execute() {        //调用接受者的方法,开灯        light.on();    }}

2、创建接受者实体,它负责接受请求,执行命令。它是动作的执行者。

public class Light {    public void on(){        System.out.println("灯亮了");    }}

3、创建调用者,它是动作的请求者,要调用具体的命令实体,可以设置不同的命令。

public class SimpleRemoteControl {    //保存不同的命令    Command command;    public SimpleRemoteControl(){}    //设置和接受不同的命令    public void setCommand(Command command){        this.command=command;    }    //触发命令的执行    public void buttonWasPresses(){        command.execute();    }}

4、实际使用

public class RemoteControlTest {    public static void main(String[] args) {        //定义调用者实体(请求者)        SimpleRemoteControl simpleControl=new SimpleRemoteControl();        //调用接受者实体(执行者)        Light light=new Light();        //定义命令,需要设置一个接受者        Command lightCommand=new LightOnCommand(light);        //在调用者中设置命令        simpleControl.setCommand(lightCommand);        //发送请求,开灯        simpleControl.buttonWasPresses();    }}
原创粉丝点击