美文网首页设计模式
用ts学习命令模式

用ts学习命令模式

作者: 潘杉杉_06_03 | 来源:发表于2018-10-30 21:35 被阅读54次

命令模式 (Command Pattern)

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

意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。

主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。

关键代码:

需要定义三个角色:

1、received 真正的命令执行对象

2、Command 命令

3、invoker 使用命令对象的入口

我们来实现一个用户用遥控器打开客厅的灯的demo

Command

命令对象提供了 execute() 这个方法封装了命令实际调用者的执行动作

interface Command { // 命令接口
    execute():void
}

received 真正的命令执行对象

真正的命令执行对象是 客厅的灯

interface Light { // 灯这个设备具有 开灯这个方法
    on():void
    off():void
}

class LivingRoomLight implements Light { // 客厅的灯
    public on(){
        console.log('开灯')
    }
    public off(){
        console.log('关灯')
    }
}

invoker 使用命令对象的入口 (遥控器)

遥控器内持有一个命令插槽可以插入任何命令

当按钮按下时便会让命令执行

class SimpleRemoteControl {
    public slot:Command
    public setCommand(command:Command){ // 这个方法用来设置插槽控制的命令
        this.slot = command
    }
    public buttonWasPressed(){ // 当按钮按下时这个方法就会被调用
        this.slot.execute() // 使用当前命令衔接插槽,并调用它的 execute 方法
    }
}

我们还需要一个会使用命令模式(遥控器)的用户

class User { // 这是一个使用命令模式的客户
    public openLightWithControl(light:Light, remoteControl:SimpleRemoteControl){ // 它使用遥控器开灯
          // 生成将灯打开的命令
        let command = new LightOnCommand(light) // 生成一个打开客厅灯的命令
        // 然后将命令注入遥控器
        remoteControl.setCommand(command)
        // 按下遥控器的开关执行这个命令
        remoteControl.buttonWasPressed() // 这样就可以执行任何命令了
    }
}

测试一下

// 测试一下

// 新建遥控器
let remoteControl = new SimpleRemoteControl()
// 新建灯
let light = new LivingRoomLight()
// 新建用户
let user = new User()

user.openLightWithControl(light, remoteControl) // 用遥控器开灯

有兴趣的朋友可以尝试封装一个关灯命令

浏览器输出结果

开灯
undefined

相关代码 demo06
(完)

相关文章

  • 用ts学习命令模式

    命令模式 (Command Pattern) 定义: 将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数...

  • 用ts学习策略模式

    策略模式 (Strategy Pattern) 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他...

  • 用ts学习工厂模式

    工厂模式 (Factory Pattern) 定义: 定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。...

  • 用ts学习状态模式

    状态模式 (State Pattern) 定义:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的...

  • 用ts学习装饰器模式

    装饰器模式 (Decorator Pattern) 假如我们需要为一家咖啡店比如星巴克写一个自动售货系统,需要定义...

  • 用ts学习单件模式

    单件模式 (Singleton Pattern) 定义: 确保一个类只有一个实例,并提供一个局部访问点。 单件模式...

  • 用ts学习迭代器模式

    迭代器模式 (Iterator Pattern) 定义: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露...

  • 用ts学习模板方法模式

    模板方法模式 (Template Pattern) 定义: 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类...

  • 用ts学习观察者模式

    观察者模式 (Observer Pattern) 定义:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,...

  • 用ts学习适配器模式

    适配器模式 (Adapter Pattern) 定义:将一个类接口,转换成客户期望的另一个接口。适配器让原本接口不...

网友评论

    本文标题:用ts学习命令模式

    本文链接:https://www.haomeiwen.com/subject/jcmntqtx.html