美文网首页
命令模式

命令模式

作者: 一毛钱 | 来源:发表于2019-03-31 22:43 被阅读0次

命令模式-定义

命令模式(Command Pattern)
第一点:将一个请求封装成为一个对象,从而让用户使用不同的请求将客户端参数化。
第二点:对请求排队或者纪录请求日志,以及支持撤销操作说白了:让我们程序扩展性更加好了,耦合降低了。

命令模式-应用场景

当需要将方法调用包装成一个对象,以延时方法调用,或者让其他组件在对其内部实现细节不了解的情况下进行调用的时候可以使用命令模式
场景一:应用程序支持撤销和恢复
场景二:记录请求日志,当系统故障这些命令可以重新被执行
场景三:想用对象参数化一个动作以执行操作,并且用不同命令对象来替换回调函数

命令模式 角色划分:

角色一:接收者
角色二:命令接口
角色三:具体命令
角色四:请求者

案例代码:

//角色一:命令接口(抽象命令)->TMCommandProtocol
protocol TMCommandProtocol {
    func execute()
}
class TMLeftCommand: TMCommandProtocol {
    
    private var tm:TetrisMachine
    
    init(_ tm:TetrisMachine) {
        self.tm = tm
    }
    
    func execute() {
        self.tm.toLeft()
    }
    
}
class TMRightCommand: TMCommandProtocol {
    
    private var tm:TetrisMachine
    
    init(_ tm:TetrisMachine) {
        self.tm = tm
    }
    
    func execute() {
        self.tm.toRight()
    }
    
}
class TMTransformCommand: TMCommandProtocol {
    
    private var tm:TetrisMachine
    
    init(_ tm:TetrisMachine) {
        self.tm = tm
    }
    
    func execute() {
        self.tm.toTransform()
    }
    
}

class TetrisMachine: NSObject {
    
    //具体业务逻辑
    func toLeft(){
        print("左边")
    }
    
    func toRight(){
        print("右边")
    }
    
    func toTransform(){
        print("变形")
    }
    
}
class TetrisMachineManager {
    
    private var commands = Array<TMCommandProtocol>()
    private var tm:TetrisMachine
    private var left:TMLeftCommand
    private var right:TMRightCommand
    private var transform:TMTransformCommand
    
    init(tm:TetrisMachine, left:TMLeftCommand, right:TMRightCommand, transform:TMTransformCommand) {
        self.tm = tm
        self.left = left
        self.right = right
        self.transform = transform
    }

    func toLeft(){
        self.left.execute()
        self.commands.append(TMLeftCommand(self.tm))
    }
    
    func toRight(){
        self.right.execute()
        self.commands.append(TMRightCommand(self.tm))
    }
    
    func toTransform(){
        self.transform.execute()
        self.commands.append(TMTransformCommand(self.tm))
    }
    
    //撤销
    func undo() {
        if self.commands.count > 0 {
            self.commands.removeLast().execute()
        }
    }  
}
// 外部调用
let tm = TetrisMachine()
let left = TMLeftCommand(tm)
let right = TMRightCommand(tm)
let transform = TMTransformCommand(tm)
let manager = TetrisMachineManager(tm: tm, left: left, right: right, transform: transform)
manager.toLeft()
manager.toRight()
manager.toTransform()

manager.undo()

相关文章

  • 12.vim的使用技巧

    命令模式 、命令行模式、编辑模式: INSERT 首次进入文件: 命令模式输入: 表示 命令行模式出现...

  • 五、Linux vim编辑器

    vim编辑器三种模式:命令模式、编辑模式、末行模式 1.命令模式: vim进入文件后就是命令模式 1.1 命令模式...

  • 终端操作文件

    VIM 模式切换从命令模式->编辑模式:i,a,o,I,A,O从编辑模式->命令模式:ESC从命令模式->末行模式...

  • vim 操作 && Mac 配置本地Apache

    一、vim 的基本命令操作 vim 的模式: 编辑模式 ,命令模式 编辑模式: 命令模式:可以通过命令 最重要的命...

  • Vim高效编辑器

    Vim程序员高效编辑器 命令模式,输入模式,底线命令模式 默认进入vim就是命令模式,输入i变为输入模式 命令模式...

  • Command模式

    命令模式(Command) 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Tran...

  • 设计模式详解——命令模式

    本篇文章介绍一种设计模式——命令模式。本篇文章内容参考《JAVA与模式》之命令模式。 一、命令模式的概念 命令模式...

  • Vi编辑器

    命令模式 文本输入模式 末行模式。 插入模式 移动光标: 删除命令: 撤销命令: 重复命令 文本行移动: 复制粘贴...

  • JavaScript设计模式七(命令模式)

    JavaScript设计模式七(命令模式) 定义: 命令模式是最简单和优雅的模式之一,命令模式中的命令指的是一个执...

  • Cisco 路由器配置命令大全(二)

    (1)模式转换命令 用户模式----特权模式,使用命令"enable"特权模式----全局配置模式,使用命令"co...

网友评论

      本文标题:命令模式

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