美文网首页
命令模式

命令模式

作者: bocsoft | 来源:发表于2019-01-31 15:32 被阅读0次

1、定义:对于“行为请求者”和“行为实现者”,将一组行为抽象为对象,实现二者的松耦合.命令可以提供撤销操作
2、角色:
Command:抽象命令接口.
ConcreteCommand:具体命令.
Receiver:最终执行命令的对象.
Invoker:命令对象的入口.

Go 实现版本

package command

import "strconv"

/*
1、定义:对于“行为请求者”和“行为实现者”,将一组行为抽象为对象,实现二者的松耦合.命令可以提供撤销操作
2、角色:
Command:抽象命令接口.
ConcreteCommand:具体命令.
Receiver:最终执行命令的对象.
Invoker:命令对象的入口.
 */

//命令接口
type command interface {
    Execute() string
}

//命令组
type MacroCommand struct {
    commands []command
}

// 实现命令执行逻辑
func (self *MacroCommand) Execute() string {
    var result string
    for _, command := range self.commands {
        result += command.Execute() + "\n"
    }
    return result
}
//增加命令
func (self *MacroCommand) Append(command command) {
    self.commands = append(self.commands, command)
}
//撤销操作
func (self *MacroCommand) Undo() {
    if len(self.commands) != 0 {
        self.commands = self.commands[:len(self.commands)-1]
    }
}
//清空命令
func (self *MacroCommand) Clear() {
    self.commands = []command{}
}

type Position struct {
    X, Y int
}


//创建具体命令对象
type DrawCommand struct {
    Position *Position
}

func (self *DrawCommand) Execute() string {
    return strconv.Itoa(self.Position.X) + "." + strconv.Itoa(self.Position.Y)
}



package command

import (
    "testing"
)

func TestCommand(t *testing.T){
    macro := MacroCommand{}//创建命令组

    //向命令组中增加命令
    macro.Append(&DrawCommand{&Position{1, 1}})
    macro.Append(&DrawCommand{&Position{2, 2}})

    expect := "1.1\n2.2\n"
    if macro.Execute() != expect {
        t.Errorf("Expect result to equal %s, but %s.\n", expect, macro.Execute())
    }

    //撤销一个命令
    macro.Undo()
    expect = "1.1\n"
    if macro.Execute() != expect {
        t.Errorf("Expect result to equal %s, but %s.\n", expect, macro.Execute())
    }

}

相关文章

  • 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/vdaksqtx.html