命令模式

1.应用场景
如果一个遥控器拥有多个按钮,每个按钮可以控制开或者关,但是可以动态设置控制不同的组件(比如电视,冰箱等)。
2.这时可以对每一个组件建立相应的命令,并将这些命令动态的设置进遥控器
3.代码实现

遥控器类
public class RemoteController{
    private Command[] command;
    //如果使用栈则可以从最后开始undo或者do操作(可以用于取消操作),用队列则可以从最前面的操作开始执行undo操作(可以用于系统还原后的恢复)
    public BlockingQueue<command> undo;

    public RemoteController(int slotCount){
        command = new Command[slotCount];
        undo = new ArrayBlockingQueue<command>(slotCount);
    }

    public void execute(){
        command.execute();
    }

    public void redoAllOperation(){
        while(undo.peek() != null){
            ((Command) undo.pop()).execute();
        }
    }

    public setCommand(int slot, Command command){
        this.command[slot] = command;
    }
}
    灯泡类
    public class Light{
        private int state = 0;//默认关闭
        //get set
        public void on(){
            state = 1;
            System.out.println("This Light is on");
        }
        public void off(){
            state = 0;
            System.out.println("This Light is off");
        }
    }
    命令接口
    public interface Command{
        void execute();
        void undo();
    }

    灯泡命令
    public class LightCommand implements Command{
        private Light light;
        //get set
        public LightCommand(Light light){
            this.light = light;
        }
        public void execute(){
            if(light.getState() == 0){
                light.on();
            }
            else{
                light.off();
            }
        }
        //这儿undo和execute()方法一样
        public void undo(){
            if(light.getState() == 0){
                light.on();
            }
            else{
                light.off();
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值