20
19.Golang设计模式之备忘录模式
source link: https://studygolang.com/articles/31088
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
备忘录模式
GitHub代码链接 备忘录模式(Memento Pattern)保存对象的某一个状态,以便在适时的时候回复对象。
什么是备忘录模式
备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并且在对象之外保存这个状态,这样可以在以后将这个对象恢复的原先保存的状态。
解决了什么问题
很多时候,我们需要记录一个对象的内部状态,这样允许用户取消不确定或者错误的操作。可以在以后恢复到保存前的状态。
优点
- 打游戏时可以存档
- Windows的ctrl + z
- 数据库的事物管理
缺点
- 消耗资源,每次保存消耗一定的内存
代码实现
1.1 实现备忘录类
//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 实现原始数据记录类
//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 实现数据存档类
//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] }
上一篇
下一篇
有疑问加站长微信联系
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK