デザインパターンノート20 - メメントモード(memento)

ゲームキャラクターの状態回復の問題

ゲームキャラクターには攻撃力と防御力があり、ボスとの戦闘前に自分の状態(攻撃力と防御力)を保存し、ボスとの戦闘後は攻撃力と防御力が低下し、メモオブジェクトが戻ってきます。戦闘前の状態へ

 

従来の問題分析方法

1) オブジェクトはオブジェクトの状態を保存するオブジェクトに相当するため、ゲーム内にオブジェクトが多数ある場合、管理に不便であり、オーバーヘッドも非常に高くなります。

2) 従来の方法は、単純にバックアップを作成し、別のオブジェクトを新規作成し、バックアップする必要があるデータをこの新しいオブジェクトに入れることですが、これによりオブジェクトの内部詳細が公開されてしまいます。

3) 解決策: => メモモード

 

基本的な紹介

1) Memento パターン (Memento パターン) オブジェクトの内部状態をキャプチャし、カプセル化を壊さずにこの状態をオブジェクトの外部に保存します。これにより、後でオブジェクトが以前に保存された状態に復元されます

2) ここでメモモードについて理解できます。実生活におけるメモは、やるべき特定のことを記録したり、忘れられた場合に備えて共通の意見に達したことを記録したりするために使用されます。ソフトウェア レベルでは、メモ モードは同じ意味を持ちます。メモ オブジェクトは主にオブジェクトの特定の状態やデータを記録するために使用されます。ロールバックが必要な場合は、回復のためにメモ オブジェクトから元のデータを取得できます。オペレーション。

3) メモモードは動作モードです

 

 

メモパターンの原理クラス図

 

原理クラス図の説明(メモモードの役割と責任)

1) 発信元: オブジェクト (状態を保存する必要があるオブジェクト)

2) Memento: Memento オブジェクト。良好な記録、つまりオリジネーターの内部状態を保持する責任があります。

3) Caretaker: ガーディアン オブジェクト。効率を向上させるためにコレクション管理を使用して、複数のメモ オブジェクトを保存する責任があります。

4) 注: 複数の発信元オブジェクトのステータスを異なる時点で保存したい場合は、HashMap <String, collection> が必要なだけで保存することもできます。

 

 

コアコード:

        //ケアテイカーの現在の状態を保存します
        Caretaker Caretaker = new Caretaker();
        Caretaker.setMemento(gameRole.createMemento());
 

その中で、管理者は Memento オブジェクトを管理しており、復元する必要がある場合は、Memento オブジェクトから元の状態を取り出すことができます。

gameRole.recoverGameRoleFromMemento(caretaker.getMemento());

 

別の書き方もあります。Caretaker は Memento キューを保持できます。

 

メメントパターンの注意点と詳細

1) 状態を復元するメカニズムをユーザーに提供し、ユーザーが特定の過去の状態に簡単に戻ることができるようにします。

2) 情報のカプセル化が実現されるため、ユーザーは状態保存の詳細を気にする必要がなくなります。

3) クラスのメンバ変数が多すぎると、必然的に比較的大きなリソースを占有し、保存するたびに一定量のメモリを消費するため注意が必要です

4) 適用可能なアプリケーションシナリオ: 1. 医療を後悔します。2. ゲームをプレイするときにアーカイブします。3. Windows の場合は ctri + z。4. IE に戻ります。4. データベーストランザクション管理

5) メモリを節約するために、メモ モードをプロトタイプ モードと組み合わせて使用​​できます。

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/qq_22059611/article/details/103297765
おすすめ