备忘录模式——软件的“后悔药”

简介: 备忘录模式(Memento Pattern)是一种行为型设计模式

备忘录模式允许我们在不破坏对象封装的前提下,捕获并保存对象的内部状态,以便在需要时可以将对象恢复到先前的状态。

在备忘录模式中,主要有三个角色:

  1. Originator(发起人):负责创建一个备忘录用来记录自身的内部状态,并可以使用备忘录恢复到先前的状态。

  2. Memento(备忘录):用来存储Originator的内部状态,防止被其他对象访问。

  3. Caretaker(负责人):负责保存备忘录对象,并提供将备忘录恢复到先前状态的方法。

以下是Go的简单示例:

package main



import "fmt"



// 备忘录

type Memento struct {

 state string

}



func NewMemento(state string) *Memento {

 return &Memento{state: state}

}



func (m *Memento) GetState() string {

 return m.state

}



// 发起人

type Originator struct {

 state string

}



func NewOriginator() *Originator {

 return &Originator{}

}



func (o *Originator) SetState(state string) {

 o.state = state

}



func (o *Originator) CreateMemento() *Memento {

 return NewMemento(o.state)

}



func (o *Originator) RestoreMemento(m *Memento) {

 o.state = m.GetState()

}



// 负责人

type Caretaker struct {

 memento *Memento

}



func (c *Caretaker) SaveMemento(m *Memento) {

 c.memento = m

}



func (c *Caretaker) GetMemento() *Memento {

 return c.memento

}



func main() {

 originator := NewOriginator()

 caretaker := &Caretaker{}



 originator.SetState("State 1")

 fmt.Println("Current state:", originator.state)



 memento := originator.CreateMemento()

 caretaker.SaveMemento(memento)



 originator.SetState("State 2")

 fmt.Println("Current state:", originator.state)



 memento = caretaker.GetMemento()

 originator.RestoreMemento(memento)

 fmt.Println("Current state:", originator.state)

}

在上面的示例中,发起人有一个内部的状态state,通过SetState设置状态,通过CreateMemento创建一个备忘录,将当前的状态保存到备忘录中,通过RestoreMemento将发起人的状态恢复到备忘录所保存的状态。

备忘录有一个state字段用来保存发起人状态。

发起人不能直接访问备忘录的state字段,只能通过GetState获取状态。

负责人保存一个备忘录对象,提供SaveMemento和GetMemento方法来保存和获取备忘录。

在示例中,先设置Originator的状态为"State 1",然后创建一个备忘录,并将备忘录保存到Caretaker中。接着,把Originator的状态设定为"State 2",并通过Caretaker获取之前保存的备忘录,然后将Originator的状态恢复到备忘录保存的状态。最后,我们打印当前的状态,可以看到Originator的状态已经恢复到了之前的状态。

目录
相关文章
|
5月前
|
设计模式
备忘录模式-大话设计模式
备忘录模式-大话设计模式
|
6月前
|
存储 设计模式 Java
|
存储 设计模式
备忘录模式-实现撤销功能
备忘录模式-实现撤销功能
76 1
|
存储 设计模式 C++
2023-7-24-第二十二式备忘录模式
2023-7-24-第二十二式备忘录模式
94 0
|
设计模式 存储 JSON
设计模式再探-备忘录模式
最近在做一学期的语文课,每一节课结束的时候,需要将这节课上到哪儿了给记录下来;以便于下次再上课的时候接着上,这样一个需求。
备忘录模式——存档读档
备忘录模式——存档读档
备忘录模式实例象棋中“悔棋”操作
备忘录模式实例象棋中“悔棋”操作
115 0
备忘录模式实例象棋中“悔棋”操作
|
设计模式 存储 JavaScript
一起学习设计模式:备忘录模式——软件的“后悔药”
备忘录是一种行为设计模式,允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态, 并将其保存下来。 备忘录模式就像是软件中的“后悔药”,可以在软件中实现后悔机制的设计模式。
一起学习设计模式:备忘录模式——软件的“后悔药”
|
存储 设计模式 监控
设计模式轻松学【二三】备忘录模式
我们在下棋的时候,如果需要悔棋的功能,就需要系统记住每一步下棋的操作,这样才能够实现悔棋
116 0
设计模式轻松学【二三】备忘录模式
|
设计模式
我学会了,备忘录模式
备忘录模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
144 0
我学会了,备忘录模式