命令模式

命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也可支持撤销的操作。
这里写图片描述
命令模式可将”动作的请求者”从”动作的执行者”对象中解耦。
这里写图片描述
需求实例:遥控器控制点灯的开关。
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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值