Memento パターンは、カプセル化を破壊することなくオブジェクトの内部状態をキャプチャして保存し、後でオブジェクトを以前の状態に復元できるようにする動作設計パターンです。 pattern は、オブジェクトの内部状態を保存する Memento クラスです。
Java では、Memento クラスを定義することで Memento パターンを実装できます。Memento クラスには通常、内部状態を保存するための 1 つ以上のプライベート フィールドが含まれています保存するオブジェクトのオブジェクト。Memo クラスは、これらのフィールドを取得および設定するためのパブリック メソッドも提供します。元のオブジェクトは、Memo クラスを使用してメモを作成し、履歴に保存できます。オブジェクトの状態が必要な場合復元する場合、元のオブジェクトは履歴レコードからメモを取得し、そのメモを使用してその状態を復元できます。
メモ モードでは、通常、次の 3 つの役割が関係します。
オリジネーター (イニシエーター): 状態が保存されるオブジェクトです。メモを作成および復元するためのインターフェイスを提供し、他のオブジェクトがその内部状態を取得できるようにします。
Memento (メモ): Originator の内部状態を保存するためのオブジェクトです。Memento は、Originator の必要に応じて内部状態を保存し、Originator 以外のオブジェクトが状態にアクセスできないようにすることができます。
Caretaker (マネージャー): メモを保存し、必要に応じて復元のために作成者に提供する責任があります。Caretaker は複数のメモを保存し、複数の元に戻す操作をサポートできます。
Java でメモ モードを実装する場合、通常は上記 3 つの役割が関係します。Originator と Memento が必要であり、Caretaker は実際のニーズに応じて実装するかどうかを選択できます。
#実装メモクラス
@Data public class Memento { /** * 攻击力 */ private int attack; /** * 防御力 */ private int defense; /** * 生命值 */ private int hp; public Memento(int attack, int defense, int hp) { this.attack = attack; this.defense = defense; this.hp = hp; } }
@Data public class Role { /** * 攻击力 */ private int attack; /** * 防御力 */ private int defense; /** * 生命值 */ private int hp; public Role(int attack, int defense, int hp) { this.attack = attack; this.defense = defense; this.hp = hp; } /** * 将当前对象储存值Memento中 * @return */ public Memento save(){ return new Memento(attack,defense,hp); } /** * 从memento中获取状态;并恢复到当前状态 * @param memento */ public void restore(Memento memento){ attack = memento.getAttack(); defense = memento.getDefense(); hp = memento.getHp(); } }
public class Caretaker { private List<Memento> mementos = new ArrayList<>(); public void addMemento(Memento m){ mementos.add(m); } public Memento getMemento(int index){ return mementos.get(index); } }
public class Demo { public static void main(String[] args) { Role role = new Role(100,50,20); Caretaker caretaker = new Caretaker(); Memento memento = role.save(); caretaker.addMemento(memento); // 攻击力+10 role.setAttack(role.getAttack()+10); System.out.println(JSON.toJSONString(role)); // 恢复 role.restore(caretaker.getMemento(0)); System.out.println(JSON.toJSONString(role)); } }
これはメモ モードの完全な例です。この例では、キャラクターの攻撃力、防御力、体力を保存するメモ クラス Memento を作成します。また、ロール クラス role も作成します。キャラクターの状態を保存したり復元したりできる「Caretaker」クラスを作成し、Memento オブジェクトを保存することで、メモモードを実装しました。
#利点 オブジェクトの状態を保存および復元できるため、オブジェクトの状態の変更がより柔軟かつ制御可能になります。
以上がJava メモ パターンを利用してオブジェクトの状態を保存および復元するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。