JAVAメモモードを深く理解する


メモモード
メモモードは、オブジェクトのある状態を適切な時に復元するために保存します。メモモードは行動モードです。
紹介する
意図:
パッケージ性を損なうことなく、オブジェクトの内部状態を捕獲し、そのオブジェクト以外にこの状態を保存する。
主要解決:
メモモードとは、パッケージを破壊することなく、オブジェクトの内部状態をキャプチャし、そのオブジェクト以外にこの状態を保存することで、オブジェクトを元の状態に戻すことができます。
いつ使用しますか
多くの場合、私たちは常にオブジェクトの内部状態を記録する必要があります。このようにする目的は、ユーザーが不確定または誤った操作をキャンセルすることを許可するために、彼の元の状態に戻すことができます。彼は「後悔薬」を飲むことができます。
どう解決しますか
メモクラスを通してオブジェクトの状態を専門に記憶します。
キーコード:
お客様は覚書類と結合しないで、覚書管理クラスと結合します。
アプリケーションの例:
1、後悔薬。
2、ゲームをする時のセーブデータ。
3、Windowsのctri+z。
4、IEの後退。
5、データベースの事務管理。
利点:
1、ユーザーに状態を回復できる仕組みを提供し、ユーザーがある歴史の状態に簡単に戻ることができる。
2、情報のパッケージを実現し、ユーザーが状態の保存の詳細に関心を持たないようにする。
短所:
資源を消耗する。クラスのメンバー変数が多すぎると、必然的に大きな資源を占用します。また、保存するたびにメモリが消費されます。
使用シーン:
1、データの保存/復元が必要な関連状態シーン。
2、ロールバックの操作を提供します。
注意事項:
1、ディミットの原則を満たすために、管理覚書の種類を追加します。
2、メモリを節約するために、プロトタイプ+メモモードが使用できます。
実現する
メモモードは三つの種類のMemento、Originator、CareTakerを使用します。Mementoは復元対象の状態を含んでいる。Originatorは作成し、Mementoオブジェクトに状態を格納します。Cartakerオブジェクトは、Mementoからオブジェクトを復元する状態を担当します。
MementoPatternDemo,私たちのプレゼンテーションクラスはCareTakerとOriginatorオブジェクトを使ってオブジェクトの状態回復を表示します。

ステップ1
Mementoクラスを作成します。

public class Memento {
  private String state;
 
  public Memento(String state){
   this.state = state;
  }
 
  public String getState(){
   return state;
  } 
}
ステップ2
Originatorクラスを作成します。

public class Originator {
  private String state;
 
  public void setState(String state){
   this.state = state;
  }
 
  public String getState(){
   return state;
  }
 
  public Memento saveStateToMemento(){
   return new Memento(state);
  }
 
  public void getStateFromMemento(Memento Memento){
   state = Memento.getState();
  }
}
ステップ3
CareTakerクラスを作成します。

import java.util.ArrayList;
import java.util.List;
 
public class CareTaker {
  private List<Memento> mementoList = new ArrayList<Memento>();
 
  public void add(Memento state){
   mementoList.add(state);
  }
 
  public Memento get(int index){
   return mementoList.get(index);
  }
}
ステップ4
CareTakerとOriginatorオブジェクトを使います。

public class MementoPatternDemo {
  public static void main(String[] args) {
   Originator originator = new Originator();
   CareTaker careTaker = new CareTaker();
   originator.setState("State #1");
   originator.setState("State #2");
   careTaker.add(originator.saveStateToMemento());
   originator.setState("State #3");
   careTaker.add(originator.saveStateToMemento());
   originator.setState("State #4");
 
   System.out.println("Current State: " + originator.getState());  
   originator.getStateFromMemento(careTaker.get(0));
   System.out.println("First saved State: " + originator.getState());
   originator.getStateFromMemento(careTaker.get(1));
   System.out.println("Second saved State: " + originator.getState());
  }
}
ステップ5
出力を検証します。
Currrent State:State〓4
First saved State:State〓2
Second saved State:State〓3
以上はJAVA覚書モードの詳細を深く理解しました。JAVA覚書モードに関する資料は他の関連記事に注目してください。