目录
???????备忘录模式(Memento Pattern)又叫快照模式。通过在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,从而在需要时能够将对象恢复到之前的状态。
(1)优点:
(2)缺点:
撤销功能。比如 Microsoft Offices 这类的文档编辑软件的撤销功能。
package main
import "fmt"
// 文本编辑器应用程序,用户可以输入和编辑文本。希望能够实现撤销功能,即用户可以撤销之前的操作,恢复到之前的编辑状态。
// 备忘录对象
type Memento struct {
state string
}
func (m *Memento) GetState() string {
return m.state
}
// 发起人对象
type Originator struct {
state string
}
func (o *Originator) SetState(state string) {
o.state = state
}
func (o *Originator) CreateMemento() *Memento {
return &Memento{state: o.state}
}
func (o *Originator) RestoreMemento(memento *Memento) {
o.state = memento.GetState()
}
// 管理者对象
type Caretaker struct {
memento *Memento
}
func (c *Caretaker) SaveMemento(memento *Memento) {
c.memento = memento
}
func (c *Caretaker) GetMemento() *Memento {
return c.memento
}
// 客户端代码
func main() {
originator := &Originator{}
caretaker := &Caretaker{}
originator.SetState("State 1")
fmt.Println("当前状态:", originator.state)
caretaker.SaveMemento(originator.CreateMemento())
originator.SetState("State 2")
fmt.Println("当前状态:", originator.state)
originator.RestoreMemento(caretaker.GetMemento())
fmt.Println("恢复后的状态:", originator.state)
}