命令模式

命令模式

命令接口

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()
}
posted @ 2022-10-12 14:47  理科土拨鼠  阅读(18)  评论(0)    收藏  举报