溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java備忘錄模式實(shí)現(xiàn)狀態(tài)恢復(fù)

發(fā)布時(shí)間:2024-09-29 19:20:31 來源:億速云 閱讀:81 作者:小樊 欄目:編程語言

備忘錄模式(Memento Pattern)是一種行為設(shè)計(jì)模式,它允許在不破壞封裝性的前提下捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。以后可以恢復(fù)對(duì)象到這個(gè)狀態(tài)。

在 Java 中實(shí)現(xiàn)備忘錄模式主要包括三個(gè)角色:

  1. Originator(發(fā)起人):記錄當(dāng)前時(shí)刻它的內(nèi)部狀態(tài),并可以使用備忘錄對(duì)象恢復(fù)到之前的狀態(tài)。
  2. Memento(備忘錄):負(fù)責(zé)存儲(chǔ)發(fā)起人的內(nèi)部狀態(tài),并可防止發(fā)起人以外的對(duì)象訪問備忘錄。
  3. Caretaker(管理者):負(fù)責(zé)保存好備忘錄對(duì)象,且不能對(duì)備忘錄的內(nèi)容進(jìn)行操作或檢查。

下面是一個(gè)簡單的 Java 代碼示例,展示如何使用備忘錄模式實(shí)現(xiàn)狀態(tài)恢復(fù):

import java.util.HashMap;
import java.util.Map;

// 發(fā)起人類
class Originator {
    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    // 保存狀態(tài)到備忘錄
    public Memento saveToMemento() {
        return new Memento(state);
    }

    // 恢復(fù)狀態(tài)從備忘錄
    public void restoreFromMemento(Memento memento) {
        this.state = memento.getState();
    }
}

// 備忘錄類
class Memento {
    private String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }
}

// 管理者類
class Caretaker {
    private Map<String, Memento> mementoList = new HashMap<>();

    public void addMemento(String key, Memento memento) {
        mementoList.put(key, memento);
    }

    public Memento getMemento(String key) {
        return mementoList.get(key);
    }
}

public class MementoPatternDemo {
    public static void main(String[] args) {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();

        originator.setState("State1");
        System.out.println("Current state: " + originator.getState());
        caretaker.addMemento("key1", originator.saveToMemento());

        originator.setState("State2");
        System.out.println("Current state: " + originator.getState());
        caretaker.addMemento("key2", originator.saveToMemento());

        originator.restoreFromMemento(caretaker.getMemento("key1"));
        System.out.println("Restored state: " + originator.getState());
    }
}

在這個(gè)例子中,Originator 類記錄當(dāng)前狀態(tài)并提供了保存和恢復(fù)狀態(tài)的方法。Memento 類負(fù)責(zé)存儲(chǔ)狀態(tài)信息。Caretaker 類負(fù)責(zé)管理備忘錄對(duì)象,可以保存和獲取備忘錄。在 main 方法中,我們創(chuàng)建了一個(gè) Originator 對(duì)象,并使用 Caretaker 對(duì)象保存和恢復(fù)狀態(tài)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI