Go语言实现23种设计模式之行为型模式(中)_go sendmsg(interface{}

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  1. 观察者的通知顺序是随机的

备忘录模式

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态

适用场景
  1. 回退场景、撤销重做
  2. 备份与还原、快照与恢复
Go语言实现
type Memento struct {
	State string
}

func (m *Memento) SetState(s string) {
	m.State = s
}

func (m *Memento) GetState() string {
	return m.State
}

func (m *Memento) CreateMemento() *Memento {
	return &Memento{State: m.State}
}

type CareTaker struct {
	memento *Memento
}

func (c *CareTaker) GetMemento() *Memento {
	return c.memento
}

func (c *CareTaker) SetMemento(m *Memento) {
	c.memento = m
}

func main() {
	o := Memento{State: "running"}
	fmt.Printf("当前状态: %s", o.State)

	c := new(CareTaker)
	c.SetMemento(o.CreateMemento())

	o.SetState("finish")
	fmt.Printf("修改后的状态: %s", o.State)

	o.SetState(c.GetMemento().GetState())
	fmt.Printf("还原后的状态: %s", o.State)
}

备忘录模式优点
  1. 能够很方便的回到某个历史状态
  2. 实现了信息的封装,使用方不需要关心状态的保存细节
备忘录模式缺点
  1. 消耗资源

中介者模式

定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解

适用场景
  1. 系统中的对象之间存在复杂的引用关系,如相互依赖
  2. 存在交互的公共行为,如果需要改变行为可增加中介者类
Go语言实现
type Item interface {
	SendMsg(msg string)
	GetMsg(msg string)
}

type User struct {
	mediator *Mediator
}

func (u *User) SendMsg(msg string) {
	u.mediator.ForwardMsg(u, msg)
}

func (u *User) GetMsg(msg string) {
	fmt.Printf("user get msg: %s: ", msg)
}

type Server struct {
	mediator *Mediator
}

func (s *Server) SendMsg(msg string) {
	s.mediator.ForwardMsg(s, msg)
}

func (s *Server) GetMsg(msg string) {
	fmt.Printf("server get msg: %s", msg)
}

type Mediator struct {
	User
	Server
}

func (m *Mediator) ForwardMsg(item Item, msg string) {
	switch item.(type) {
	case *User:
		m.Server.GetMsg(msg)
		break
	case *Server:
		m.User.GetMsg(msg)
		break
	default:
		fmt.Printf("Error")
	}
}

func main() {
	mediator := Mediator{}

	u := User{}
	s := Server{}

	mediator.User = u
	mediator.Server = s

	u.SendMsg("Hello")
	s.SendMsg("Hi")
}

中介者模式优点
  1. 减少类间的依赖,降低类间耦合

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

升。**

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值