命令模式----读书笔记

定义

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

例子

我们写一个遥控器的例子。在遥控器上按lightOn的按钮,远程控制电灯打开。

interface Command {//命令接口,其他命令需要实现该接口
    fun excute()
}
    class Light{
        fun on(){
            println("Light on")
        }
        fun off(){
            println("Light off")
        }
    }
class LightCommand constructor(light : Light): Command{ //这是一个命令,需要实现command接口
    private var light : Light = light//该电灯对象称为接受者,负责接收命令

    override fun excute() {//实现excute方法,执行相应操作
        light.on()
    }
}
class SimpleRemoteControl{
    /**
     * 一个远程遥控器
     */
    lateinit var slot : Command;// 有一个插槽持有命令,而这个命令控制着一个装置
    fun setCommand(command: Command){//设置插槽控制的命令
        slot = command;
    }
    fun buttonPress(){//按下按钮的时候,执行命令
        slot.excute()
    }
}
fun main(args : Array<String>){
    val simpleRemoteControl = SimpleRemoteControl()
    val lightCommand = LightCommand(Light())
    simpleRemoteControl.setCommand(lightCommand)//设置控制灯的命令
    simpleRemoteControl.buttonPress()
}

类图

在这里插入图片描述

用途

队列请求

命令可以将运算打包(一个接收者和一个动作),然后将它传来传去,就像一般的对象一样。现在,即使在玲玲对象被创建许久之后,运算依然可以被调用,事实上,它甚至可以在不同的线程中被调用,我们可以利用这样的特性衍生一些应用,例如:日志安排、线程池、工作队列。
想象有一个工作队列,你在某一端添加命令,然后另一端则是线程。线程进行下面的动作,从队列中取出一个命令,调用他的excute方法,等待这个调用完成,然后将此命令丢弃,再取出下一个命令。

日志请求

当我们执行命令的时候,将历史记录存储在磁盘中。一旦系统死机,就可以将命令对象重新加载,并成批一次调用这些对象的excute()方法,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值