首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Golang语言情怀-第29期 Go 语言设计模式 备忘录

Golang语言情怀-第29期 Go 语言设计模式 备忘录

作者头像
李海彬
发布2021-02-05 16:21:24
发布2021-02-05 16:21:24
33800
代码可运行
举报
文章被收录于专栏:Golang语言社区Golang语言社区
运行总次数:0
代码可运行

1 定义

备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态

UML类图:

备忘录模式包含三个角色:

  • Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的那些内部状态
  • Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento。
  • Caretaker(管理者):负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查。

1.1 实现备忘录类

代码语言:javascript
代码运行次数:0
运行
复制
//Memento 备忘录类
type Memento struct {
    state string
}

//NewMemento 实例化备忘录类
func NewMemento(st string) *Memento {
    return &Memento{
        state: st,
    }
}

//GetState 获取备忘录类的状态
func (m *Memento) GetState() string {
    return m.state
}

1.2 实现原始数据记录类

代码语言:javascript
代码运行次数:0
运行
复制
//Originator 初始类
type Originator struct {
    state string
}

//NewOriginator 实例化初始类
func NewOriginator(st string) *Originator {
    return &Originator{
        state: st,
    }
}

//SetState 初始化类设置状态
func (o *Originator) SetState(st string) {
    o.state = st
}

//GetState 从初始类中获取状态
func (o *Originator) GetState() string {
    return o.state
}

//SaveStateToMemento 将初始类状态保存到备忘录类
func (o *Originator) SaveStateToMemento() *Memento {
    return NewMemento(o.state)
}

//GetStateFromMemento 将备忘录类的状态读取到初始类
func (o *Originator) GetStateFromMemento(memento *Memento) {
    o.state = memento.GetState()
}

1.3 实现数据存档类

代码语言:javascript
代码运行次数:0
运行
复制
//CareTaker 保存类,用于存储备忘录实例
type CareTaker struct {
    MementoList map[int]*Memento
}

//NewCareTaker 实例化保存类
func NewCareTaker() *CareTaker {
    return &CareTaker{
        MementoList: make(map[int]*Memento),
    }
}

//Add 保存类添加备忘录实例
func (ct *CareTaker) Add(index int, memento *Memento) {
    ct.MementoList[index] = memento
}

//Get 保存类获取备忘录实例
func (ct *CareTaker) Get(index int) *Memento {
    return ct.MementoList[index]
}

参考资料:

Go语言设计模式-备忘录

https://blog.csdn.net/weixin_40165163/article/details/91052749

设计模式

https://studygolang.com/articles/31088

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言情怀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 定义
    • 1.1 实现备忘录类
    • 1.2 实现原始数据记录类
    • 1.3 实现数据存档类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档