模式定义
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态
类图
要点总结
- 备忘录(Memento)存储原发器(Originator)对象的内部状态,在需要时恢复原发器状态
- Memento模式的核心是信息隐藏,即Originator需要向外界隐藏信息,保持其封装性,但同时又需要将状态保持到外界(Memento)
Go语言代码实现
工程目录
memento.go
package Memento
type 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 Memento
import (
"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)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。