既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- 观察者的通知顺序是随机的
备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态
适用场景
- 回退场景、撤销重做
- 备份与还原、快照与恢复
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)
}
备忘录模式优点
- 能够很方便的回到某个历史状态
- 实现了信息的封装,使用方不需要关心状态的保存细节
备忘录模式缺点
- 消耗资源
中介者模式
定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解
适用场景
- 系统中的对象之间存在复杂的引用关系,如相互依赖
- 存在交互的公共行为,如果需要改变行为可增加中介者类
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")
}
中介者模式优点
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!