设计模式这样玩泰简单(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()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值