首页 > 其他分享 >命令模式

命令模式

时间:2022-10-12 14:57:05浏览次数:42  
标签:package fmt system 模式 sys 命令 command func

命令模式

命令接口

package command

type command interface {
    Execute()
}

命令执行者

package command

func NewSystem() *system {
	return &system{}
}

func (s *system) OpenFile() {
	fmt.Println("打开记事本文件")
}

func (s *system) EditFile() {
	fmt.Println("编辑文件")
}

func (s *system) SaveFile() {
	fmt.Println("保存文件")
}

func (s *system) CloseFile() {
	fmt.Println("关闭文件")
}

编辑命令

package command

type edit struct {
	sys *system
}

func NewEdit(sys *system) command {
	return &edit{sys: sys}
}

func (e *edit) Execute() {
	e.sys.OpenFile()
	e.sys.EditFile()
	e.sys.SaveFile()
	e.sys.CloseFile()
}

查看命令

package command

type search struct {
	sys *system
}

func NewSearch(sys *system) command {
	return &search{sys: sys}
}

func (s *search) Execute() {
	s.sys.OpenFile()
	s.sys.CloseFile()
}

命令发出者

package command

import "fmt"

type invoke struct {
	commands []command
}

func NewInvoke() *invoke {
	return &invoke{
		commands: make([]command, 0),
	}
}

func (i *invoke) AddCommand(cmd command) {
	i.commands = append(i.commands, cmd)
}

func (i *invoke) Do() {
	for _, v := range i.commands {
		fmt.Println("**********************************")
		if v == nil {
			return
		}
		v.Execute()
	}
}

测试文件

package command

func TestCommand(t *testing.T) {
    sys := NewSystem()
	e := NewEdit(sys)
	s := NewSearch(sys)

	p := NewInvoke()
	p.AddCommand(e)
	p.AddCommand(s)
	p.Do()
}

标签:package,fmt,system,模式,sys,命令,command,func
From: https://www.cnblogs.com/mathsmouse/p/16784523.html

相关文章

  • wxjava服务商模式记录
    1.微信支付服务商必须绑定与小程序appid的授权关系。产品中心-appid账号管理-关联更多。然后在小程序登录--微信支付--确认。2.服务商功能-开发配置-特约商户appid配置-......
  • memcache常用命令
    telnet 连接MemCache服务器,对memcache进行管理:set:用于身缓存添加新的键值对。如键已存在,则之前的值将被替换。     例:setuserid00 5......
  • 模式匹配之BF
    BF1.BF算法1.1算法思想判断是否为空串判断模式串T是否长于主串S初始化:主串S和模式串T均从头开始,用指示器i,j分别指向S,T需要比较的字符两串逐位比较:当S和T均没......
  • FFmpeg 转分辨率及转编码格式方命令
    最近工作中需要用到不同分辨率,不同编码格式的视频,以下为转分辨率和转编码格式的命令转分辨率ffmpeg-iinput_file-vfscale=2048:1024output_file-hide_banner#2k......
  • 【java报错】java运行jar命令提示没有主清单属性
    java运行jar命令提示没有主清单属性在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性。这是怎么回事?今天来教大家如何解决这个问题1、在java中编译JAR文件的......
  • javaDoc命令
      packagecom.dang.www;/***@authordangchan*@version1.0*@since1.8*/publicclassDoc{Stringname;/***@authordangchan*@paramname......
  • hive常用命令
    1.创建数据(文本以tab分隔)vimtest1_hive2.创建新表CREATETABLEt_hive(aint,bint,cint)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'|';3.导入数据test1_hive到......
  • Linux系统之Bash命令(关机、重启、注销)
    Linux系统之Bash命令(关机、重启、注销)一、关机命令shutdown-hnow#立即关机shutdown-h10#10分钟后关机shutdown-h11:00#11:00关机init0......
  • MVVM模式下Telerik.RadGridView控件中RadButton按钮绑定命令无法触发
    场景数据维护页面,数据内容使用Telerik.RadGridView控件,通过点击下方newrow添加数据,误操作需要删除一行信息;希望点击RadButton后执行对应的操作,但是设置RadButton的Comm......
  • PYTHON apdu命令
    A实例化读卡器:pcsc=PcscReader()B获取所有的读卡器列表:readerName=pcsc.get_pcsc_readerlist()readerNameList=readerName.split(';')foriinrange(len(readerN......