妙博客

主机评测 香港服务器 洛杉矶VPS测评

设计模式-JAVA-备忘录模式(Memento)

备忘录模式(Memento)是一种行为型设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后可以将该对象恢复到原先保存的状态。

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

Originator(发起人):负责创建一个备忘录,并记录自己的当前状态。

Memento(备忘录):用于存储Originator的状态。

Caretaker(管理者):负责保存备忘录,并在需要时将其恢复到原始状态。

下面是一个简单的备忘录模式的实现:

// Originator
public class TextEditor {
    private String text;
    public TextEditor(String text) {
        this.text = text;
    }
    public void setText(String text) {
        this.text = text;
    }
    public String getText() {
        return text;
    }
    public Memento save() {
        return new Memento(text);
    }
    public void restore(Memento memento) {
        text = memento.getText();
    }
}
// Memento
public class Memento {
    private String text;
    public Memento(String text) {
        this.text = text;
    }
    public String getText() {
        return text;
    }
}
// Caretaker
public class TextEditorHistory {
    private Stack<Memento> history = new Stack<>();
    public void save(TextEditor editor) {
        history.push(editor.save());
    }
    public void undo(TextEditor editor) {
        if (!history.isEmpty()) {
            editor.restore(history.pop());
        }
    }
}
// Usage
public class Main {
    public static void main(String[] args) {
        TextEditor editor = new TextEditor("Hello, world!");
        TextEditorHistory history = new TextEditorHistory();
        history.save(editor);
        editor.setText("Goodbye, world!");
        history.save(editor);
        System.out.println(editor.getText()); // "Goodbye, world!"
        history.undo(editor);
        System.out.println(editor.getText()); // "Hello, world!"
    }
}


在上面的例子中,TextEditor是发起人,它保存了一个字符串的状态。Memento是备忘录,它保存了TextEditor的状态。


TextEditorHistory是管理者,它保存了TextEditor的历史状态,并可以将其恢复到以前的状态。


在Main类中,我们创建了一个TextEditor和一个TextEditorHistory,并使用它们来保存和恢复TextEditor的状态。


JAVA7大原则和23种设计模式汇总,点我查看

Copyright Your 142132.com Rights Reserved. 赣ICP备17010829号-2