デザインパターン - メモモード

まず、基本的な導入

メモモード(行動):カプセル化、キャプチャおよびオブジェクトの内部状態に違反し、オブジェクトの外側の状態を保存せずに、後でオブジェクトが以前に保存した状態を復元できるようにする必要がありそうということ。

第二に、含む役割

1.スポンサーの役割:、現在の時刻の内部状態情報を記録メモやメモデータの回復機能を作成するために提供し、他のビジネス機能の実現は、それはメモのすべての情報にアクセスすることができます。

2.覚書の役割:スポンサーに必要なときに、これらの内部状態を内部状態のスポンサーを格納するための責任を負います。

管理3.覚書は、保存およびアクセスメモ機能を提供するために、それはメモの内容を変更してアクセスすることができません。

 

第三に、ケースとUMLのクラス図

ケース説明:

           私たちは一歩上の前のステップ以上にロールバックにワード文書、+ S操作プレスCTRL保存合計習慣的な、間違いを操作するとき。

 

UML类图:

クラスワード:

public class Word {

    //word内容
    private StringBuilder content = new StringBuilder();

    /**
     * 保存当前步骤
     * @return 备忘录
     */
    public Memento saveContent() {
        return new Memento(content.toString());
    }

    /**
     * 回滚
     * @param memento 回滚的内容
     */
    public void rollBack(Memento memento) {
        this.content = new StringBuilder();
        this.content.append(memento.getContent()).append("\n");
    }

    public void write(String content) {
        this.content.append(content);
    }

    public String show() {
        return content.toString();
    }
}

説明:ドキュメントクラス、スポンサーの役割、現在のドキュメントの保存とロールバック機能と書き込み機能を提供します。

クラスメメント:

public class Memento {

    //文档内容
    private String content;

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

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

説明:クラスのメモ、メモの役割は、時間内にワード文書瞬間の内容を保存します。

类MementoManage:

public class MementoManage {

    private LinkedList<Memento> mementoList = new LinkedList<>();

    /**
     * 添加一个备忘录即保存内容
     * @param memento 备忘录
     */
    public void addMemento(Memento memento) {
        mementoList.add(memento);
    }

    /**
     * 获取上一步保存的内容
     * @return 备忘录
     */
    public Memento previousStep() {
        return mementoList.removeLast();
    }
}

説明:メモの管理クラス、ロールマネージャ、メモを保存して検索するためには、メモを変更することはできません。

クラスMementoTest:

public class MementoTest {

    public static void main(String[] args) {
        //备忘录管理
        MementoManage mementoManage = new MementoManage();
        //创建一个文档准备写内容
        Word word = new Word();
        word.write("hello word!");
        //保存内容
        Memento memento = word.saveContent();
        mementoManage.addMemento(memento);
        word.write("jaav");
        //继续写内容
        word.write("我要学java");
        //发现之前的java打错了,返回上一步
        //获取上一步保存的内容
        Memento previousStep = mementoManage.previousStep();
        //word进行回滚
        word.rollBack(previousStep);
        //输出回滚后的内容
        System.out.println(word.show());
    }
}

説明:テストとクライアント。

 

第四に、アプリケーションのシナリオ

1.状態のシーンに関連するデータを保存/復元する必要があります

2.ロールバック操作を提供します。

公開された39元の記事 ウォン称賛61 ビュー60000 +

おすすめ

転載: blog.csdn.net/m0_37914588/article/details/103947780