备忘录模式是一种软件设计模式,主要用于保存和恢复对象的状态,以便在需要时可以恢复到先前的状态

备忘录模式是一种软件设计模式,主要用于保存和恢复对象的状态,以便在需要时可以恢复到先前的状态。这种模式通常用于以下情况:

  1. 当您需要保存对象状态的快照以便以后恢复时。
  2. 当您需要通过撤消操作来取消一些不应该执行的操作时。
  3. 当仅在修改对象状态时才能访问其状态,但客户端代码需要保存状态并在以后恢复时。

备忘录模式包含三个主要部分:发起人(Originator),备忘录(Memento)和看管人(Caretaker)。发起人是要保存状态的对象,备忘录是状态的快照,而看管人负责保存和恢复备忘录。

下面是一个简单的Python例子,展示了备忘录模式的实现方式:

class Originator:
    def __init__(self):
        self._state = None

    def set_state(self, state):
        self._state = state

    def save_state(self):
        return Memento(self._state)

    def restore_state(self, memento):
        self._state = memento.get_state()

    def show_state(self):
        print("Current state: ", self._state)


class Memento:
    def __init__(self, state):
        self._state = state

    def get_state(self):
        return self._state


class Caretaker:
    def __init__(self):
        self._mementos = []

    def add_memento(self, memento):
        self._mementos.append(memento)

    def get_memento(self, index):
        return self._mementos[index]


# 使用示例
originator = Originator()
caretaker = Caretaker()

originator.set_state("State1")
originator.show_state()

caretaker.add_memento(originator.save_state())

originator.set_state("State2")
originator.show_state()

caretaker.add_memento(originator.save_state())

originator.set_state("State3")
originator.show_state()

caretaker.add_memento(originator.save_state())

originator.restore_state(caretaker.get_memento(1))
originator.show_state()

备忘录设计模式通常在以下情况下使用:

  1. 在需要保存和恢复对象状态的情况下,例如,当用户需要撤销操作时。
  2. 当在不破坏封装性的情况下需要获取对象状态时。
  3. 当需要避免直接访问对象状态时。

在上述情况下,使用备忘录模式可以帮助程序员更有效地管理对象状态,并提供支持撤销和恢复操作的能力。

以下是Python备忘录设计模式的示例代码(一):

class Memento:
    def __init__(self, state: str):
        self._state = state

    def get_state(self):
        return self._state


class Originator:
    _state = ""

    def set_state(self, state: str):
        print("Originator: Setting state to", state)
        self._state = state

    def save_to_memento(self):
        print("Originator: Saving to Memento.")
        return Memento(self._state)

    def restore_from_memento(self, memento: Memento):
        self._state = memento.get_state()
        print("Originator: Restoring state to", self._state)


class CareTaker:
    _mementos = []

    def add_memento(self, memento: Memento):
        self._mementos.append(memento)
        print("CareTaker: Adding Memento", memento.get_state())

    def get_memento(self, index: int) -> Memento:
        print("CareTaker: Getting Memento", index)
        return self._mementos[index]


originator = Originator()
care_taker = CareTaker()

originator.set_state("State 1")
originator.set_state("State 2")
care_taker.add_memento(originator.save_to_memento())
originator.set_state("State 3")
care_taker.add_memento(originator.save_to_memento())
originator.set_state("State 4")

originator.restore_from_memento(care_taker.get_memento(0))

以下是Python备忘录设计模式的示例代码(二):

class Editor:
    _text = ""
    _curX = 0
    _curY = 0
    _saved_states = []

    def __init__(self, text):
        self._text = text

    def write(self, text):
        self._text += text
        self._curX += len(text)

    def save_state(self):
        self._saved_states.append(EditorState(self._text, self._curX, self._curY))

    def restore_last_saved_state(self):
        if len(self._saved_states) != 0:
            last_state = self._saved_states.pop()
            self._text = last_state.get_text()
            self._curX = last_state.get_cur_x()
            self._curY = last_state.get_cur_y()

    def get_text(self):
        return self._text


class EditorState:
    def __init__(self, text, curX, curY):
        self._text = text
        self._curX = curX
        self._curY = curY

    def get_text(self):
        return self._text

    def get_cur_x(self):
        return self._curX

    def get_cur_y(self):
        return self._curY


editor = Editor("Hello, world!\n")
editor.write("This is an example of Memento pattern.\n")
editor.save_state()
editor.write("Another line.")
editor.save_state()
print(editor.get_text())
editor.restore_last_saved_state()
print(editor.get_text())
editor.restore_last_saved_state()
print(editor.get_text())

备忘录模式是一种软件设计模式,主要用于保存和恢复对象的状态。在Java中,可以通过以下步骤来实现备忘录模式:

1.创建原发器类,该类包含需要被保存的状态,以及一个创建备忘录对象的方法和一个将对象恢复到先前状态的方法。

public class Originator {
    private String state;
    
    public void setState(String state) {
        this.state = state;
    }
    
    public String getState() {
        return state;
    }
    
    public Memento createMemento() {
        return new Memento(state);
    }
    
    public void restoreMemento(Memento memento) {
        this.state = memento.getState();
    }
}

2.创建备忘录类,该类包含需要被保存的状态。

public class Memento {
    private String state;
    
    public Memento(String state) {
        this.state = state;
    }
    
    public String getState() {
        return state;
    }
}

3.创建管理者类,该类维护一个备忘录列表,以及将备忘录添加到列表中和从列表中获取备忘录的方法。

public class Caretaker {
    private List<Memento> mementoList = new ArrayList<>();
    
    public void add(Memento memento) {
        mementoList.add(memento);
    }
    
    public Memento get(int index) {
        return mementoList.get(index);
    }
}

以上是备忘录模式的基本实现方式。

在这里插入图片描述

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值