設計モード-メモモード

2597 ワード

主な目的は1つのオブジェクトのある状態を保存して、適当な時にオブジェクトを回復するためで、個人はバックアップモードと呼ぶのがもっとイメージ的だと思って、通俗的に言えば:原始クラスAがあると仮定して、Aの中に各種の属性があって、Aはバックアップが必要な属性を決定することができて、メモクラスBはAのいくつかの内部状態を記憶するために使用して、クラスCは、メモを記憶するために使用して、しかも記憶するしかありません.修正などの操作はできません.
public class Original {  
      
    private String value;  
      
    public String getValue() {  
        return value;  
    }  
  
    public void setValue(String value) {  
        this.value = value;  
    }  
  
    public Original(String value) {  
        this.value = value;  
    }  
  
    public Memento createMemento(){  
        return new Memento(value);  
    }  
      
    public void restoreMemento(Memento memento){  
        this.value = memento.getValue();  
    }  
}  
public class Memento {  
      
    private String value;  
  
    public Memento(String value) {  
        this.value = value;  
    }  
  
    public String getValue() {  
        return value;  
    }  
  
    public void setValue(String value) {  
        this.value = value;  
    }  
} 
public class Storage {  
      
    private Memento memento;  
      
    public Storage(Memento memento) {  
        this.memento = memento;  
    }  
  
    public Memento getMemento() {  
        return memento;  
    }  
  
    public void setMemento(Memento memento) {  
        this.memento = memento;  
    }  
} 
public class Test {  
  
    public static void main(String[] args) {  
          
        //        
        Original origi = new Original("egg");  
  
        //        
        Storage storage = new Storage(origi.createMemento());  
  
        //           
        System.out.println("      :" + origi.getValue());  
        origi.setValue("niu");  
        System.out.println("       :" + origi.getValue());  
  
        //           
        origi.restoreMemento(storage.getMemento());  
        System.out.println("       :" + origi.getValue());  
    }  
} 

メリット
  • 発起人オブジェクトの内部情報は発起人オブジェクト以外の場所に保存する必要がある場合があるが、発起人オブジェクト自身が読み取らなければならない場合がある.この場合、覚書モードを用いる複雑な発起人内部情報を他のオブジェクトに対して遮蔽することができ、パッケージの境界
  • を適切に保持することができる.
  • 本モデルは発起人を簡略化した.発起人は、内部ステータスのバージョンを管理および保存する必要がなくなり、クライアントは必要なステータスのバージョンを自分で管理できます.

  • 欠点
  • イニシエータロールのステータスをメモオブジェクトに完全に格納する必要がある場合、リソース消費の上でメモオブジェクトは高価になります.
  • 担当者ロールがメモを格納すると、担当者はこの状態がどれだけの記憶領域を占有するか分からないため、操作が高価であるかどうかをユーザーに注意できない可能性があります.
    適用シーン
  • 機能は複雑ですが、属性履歴を維持または記録するクラス
  • が必要です.
  • 保存する属性が多数の属性のほんの一部である場合
  • .