实践GoF的23种设计模式:备忘录模式
更新时间:2026-02-04 09:34:23
晨欣小编
备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不暴露对象实现细节的情况下捕获和恢复对象的内部状态。备忘录模式通常涉及三个主要角色:发起人(Originator)、备忘录(Memento)、管理者(Caretaker)。
以下是备忘录模式的实践过程,以便更好地理解:
发起人(Originator):
发起人是持有状态的对象,需要在不破坏封装的情况下保存和恢复其状态。
发起人需要创建备忘录对象,将当前状态保存到备忘录中,并能够从备忘录中恢复状态。
备忘录(Memento):
备忘录是用于存储发起人对象状态的对象。
备忘录通常提供一些接口,允许发起人访问其状态的一部分或全部,并且不会暴露发起人内部的具体实现细节。
管理者(Caretaker):
管理者负责保存和管理备忘录对象。
管理者通常不直接操作备忘录中的状态,而是在需要时将备忘录交还给发起人,或者将备忘录存储在某个历史记录中。
下面是一个简单的备忘录模式的示例,使用 Go 语言:
goCopy codepackage mainimport "fmt"// 备忘录type Memento struct {
State string}// 发起人type Originator struct {
State string}func (o *Originator) CreateMemento() *Memento { return &Memento{State: o.State}
}func (o *Originator) RestoreMemento(m *Memento) {
o.State = m.State
}// 管理者type Caretaker struct {
MementoList []*Memento
}func (c *Caretaker) AddMemento(m *Memento) {
c.MementoList = append(c.MementoList, m)
}func (c *Caretaker) GetMemento(index int) *Memento { return c.MementoList[index]
}func main() {
originator := &Originator{State: "State1"}
caretaker := &Caretaker{} // 保存状态
memento1 := originator.CreateMemento()
caretaker.AddMemento(memento1) // 修改状态
originator.State = "State2"
// 再次保存状态
memento2 := originator.CreateMemento()
caretaker.AddMemento(memento2) // 恢复到第一个状态
originator.RestoreMemento(caretaker.GetMemento(0))
fmt.Println("Current State:", originator.State)
}这个示例演示了备忘录模式的基本实现。发起人对象(Originator)可以创建备忘录,并在需要时恢复状态。管理者对象(Caretaker)负责存储和管理备忘录。备忘录对象(Memento)用于保存状态。


售前客服