备忘录模式
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]
}
上一篇
下一篇
有疑问加站长微信联系(非本文作者)