设计模式这样玩泰简单(Golang版)-命令模式

Posted hello_读书就是赚钱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式这样玩泰简单(Golang版)-命令模式相关的知识,希望对你有一定的参考价值。

场景

老板:我们有一个业务的组件实现是第三方,他们暴露的接口非常细粒度,我们要根据不同的接口组成一个指令,并且指令能复用,你有什么好的方案
你:好的,老板,那就使用命令模式

方案

在这里插入图片描述
命令模式,就是利用一些实现同一接口的对象对真正的业务对象行为进行封装,成为一个可以复用的、另外组合的实现方式.如图所示,我们可以针对某一个业务对象定义一个命令接口,再创造不同的命令实现,在这些命令实现中,每个都聚合了真正的业务对象,通过实现接口方法,完成对业务对象行为的封装.所以能达到场景的要求.
命令模式看起来很像外观模式、代理模式、策略模式,本质上来说他们都是利用了对象聚合代替继承来解决问题.但命令模式的主要的特征是在于通过不同的实现去封装同一个业务对像的行为.所以从这个点上去理解可以比较好的区分他们的不同之处.

实现

see:https://github.com/jjtHappy/design-pattern-so-simple

package main

import "fmt"

type Command interface {
	Exec()
}

type Server struct {
}

func (*Server) Foo1() {
	fmt.Println("方法一")
}
func (*Server) Foo2() {
	fmt.Println("方法二")
}

type CommandImpl1 struct {
	Server *Server
}

func (c *CommandImpl1) Exec() {
	fmt.Println("命令一执行")
	c.Server.Foo1()
	c.Server.Foo2()
}

type CommandImpl2 struct {
	Server *Server
}

func (c *CommandImpl2) Exec() {
	fmt.Println("命令二执行")
	c.Server.Foo2()
	c.Server.Foo1()
}

func main() {
	fmt.Println("老板:对一个业务实现不同行为的封装")
	fmt.Println("你:老板")
	server := &Server{}
	command1 := CommandImpl1{
		Server: server,
	}
	command1.Exec()
	command2 := CommandImpl1{
		Server: server,
	}
	command2.Exec()
}

以上是关于设计模式这样玩泰简单(Golang版)-命令模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式这样玩泰简单(Golang版)-外观模式

设计模式这样玩泰简单(Golang版)-策略模式

设计模式这样玩泰简单(Golang版)-装饰者模式

设计模式这样玩泰简单(Golang版)-状态模式

设计模式这样玩泰简单(Golang版)-状态模式

设计模式这样玩泰简单(Golang版)-状态模式