1 定义
备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态
UML类图:
备忘录模式包含三个角色:
- Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的那些内部状态
- Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento。
- Caretaker(管理者):负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查。
2 go语言实现
2.1 实现三个角色
type Memento struct {
state string
}
type Caretaker struct {
Memento
}
type Originator struct {
State string
}
func (o *Originator) CreateMemento() Memento {
return Memento{
state: o.State,
}
}
func (o *Originator) SetMemento(m Memento) {
o.State = m.state
}
func (o *Originator) Show() {
fmt.Println("state = " + o.State)
}
2.2 客户端调用
func main() {
o := &memento.Originator{}
o.State = "on"
o.Show()
fmt.Println("===================")
c := memento.Caretaker{}
c.Memento = o.CreateMemento()
o.State = "off"
o.Show()
fmt.Println("+++++++++++++++++++")
o.SetMemento(c.Memento)
o.Show()
}