
实践GoF的23种设计模式:备忘录模式
2023-11-25 13:56:42
晨欣小编
备忘录模式(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
)用于保存状态。