备忘录模式通过Originator、Memento和Caretaker实现状态保存与恢复,如:设置State1、State2、State3后,可回退到State2,确保封装性不被破坏。

在Go语言中实现备忘录模式,主要是为了保存和恢复对象的内部状态,同时不破坏封装性。该模式适用于需要撤销操作、历史记录或快照功能的场景。核心角色包括原发器(Originator)、备忘录(Memento)和负责人(Caretaker)。
定义原发器(Originator)
原发器是拥有内部状态的对象,它可以创建一个备忘录来保存当前状态,也可以从备忘录中恢复状态。
type Originator struct { state string}func (o *Originator) SetState(state string) { o.state = state}func (o *Originator) GetState() string { return o.state}// 创建备忘录,保存当前状态func (o *Originator) CreateMemento() *Memento { return &Memento{state: o.state}}// 从备忘录恢复状态func (o *Originator) RestoreFromMemento(m *Memento) { o.state = m.GetState()}
定义备忘录(Memento)
备忘录用于存储原发器的内部状态。为了保持封装性,通常将状态字段设为私有,并提供只读访问方法。
type Memento struct { state string}func (m *Memento) GetState() string { return m.state}
定义负责人(Caretaker)
负责人负责管理备忘录的保存和获取,但它不能访问备忘录的内部状态,只能通过原发器进行交互。
立即学习“go语言免费学习笔记(深入)”;
type Caretaker struct { mementos []*Memento}func (c *Caretaker) AddMemento(m *Memento) { c.mementos = append(c.mementos, m)}func (c *Caretaker) GetMemento(index int) *Memento { if index = len(c.mementos) { return nil } return c.mementos[index]}
使用示例
下面是一个完整的使用流程,展示如何保存和恢复对象状态。
func main() { originator := &Originator{} caretaker := &Caretaker{} originator.SetState("State1") caretaker.AddMemento(originator.CreateMemento()) originator.SetState("State2") caretaker.AddMemento(originator.CreateMemento()) originator.SetState("State3") fmt.Println("当前状态:", originator.GetState()) // 输出: State3 // 恢复到前一个状态 memento := caretaker.GetMemento(1) if memento != nil { originator.RestoreFromMemento(memento) } fmt.Println("恢复后状态:", originator.GetState()) // 输出: State2}
基本上就这些。Go语言通过结构体和指针轻松实现备忘录模式,关键在于控制状态的访问权限,确保封装性不被破坏。适合用在需要版本回退或操作撤销的系统中。
以上就是如何使用Golang实现备忘录模式保存对象状态的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1412938.html
微信扫一扫
支付宝扫一扫