模式定义
在不毁坏封装性的前提下,捕捉一个对象的外部状态,并在该对象之外保留这个状态,这样当前就能够将该对象复原到原先保留的状态
类图
要点总结
- 备忘录(Memento)存储原发器(Originator)对象的外部状态,在须要时复原原发器状态
- Memento模式的外围是信息暗藏,即Originator须要向外界暗藏信息,放弃其封装性,但同时又须要将状态放弃到外界(Memento)
Go语言代码实现
工程目录
memento.go
package Mementotype Memento struct { state int}func NewMemento(value int) *Memento{ return &Memento{value}}type Number struct { value int}func NewNumber (value int) *Number{ return &Number{value: value}}func (n * Number) Double(){ n.value = 2 * n.value}func (n *Number) Half () { n.value /= 2}func (n *Number) Value() int { return n.value}func (n *Number) CreateMemento() *Memento{ return NewMemento(n.value)}func (n *Number) SetMemento(memento *Memento){ n.value = memento.state}
memento_test.go
package Mementoimport ( "fmt" "testing")func TestNumber_SetMemento(t *testing.T) { n := NewNumber(7) n.Double() n.Double() memento := n.CreateMemento() //记录以后时刻的值 n.Half() n.SetMemento(memento) //拿出过后记录的值 fmt.Println(n.value)}