1。定義
カプセル化を破壊することなく、オブジェクトの内部状態をキャプチャし、この状態をオブジェクトの外側に保存します。このようにして、オブジェクトは後で元の保存状態に復元できます。
2。使用の理由
ある時点でオブジェクトの元の状態を復元したい。
3。該当する状況の例
メモモードには多くのアプリケーションがありますが、見てきましたが、注意深く考えていません。これは、メモモードの使用にすぎません。いくつかの例を挙げましょう:
EG1。 JSP+Javabeanでのメモの使用:
システムにアカウントを追加するときは、ユーザー名、パスワード、連絡先番号、住所、その他の情報をフォームに記入する必要があります。一部のフィールドが入力されていない、または誤って入力されている場合、ユーザーが[送信]ボタンをクリックすると、ユーザーが入力したオプションを新しいページに保存し、間違ったオプションを求めて保存する必要があります。これは、scope = "request"またはscope = "session" javabeanの特性を使用して達成されます。つまり、メモモードを使用して達成されます。
EG2。車のブレーキを修理するとき。まず、両側のバッフルを取り外して、左と右のブレーキパッドを露出させます。 1つのピースのみを取り外すことができ、もう1つのピースはブレーキの取り付け方法を示すメモとして機能します。この作品の修理が完了した後にのみ、別のピースを削除できます。 2番目のピースが削除されると、最初のピースがメモになります。
EG3。人生で買うための後悔の薬はないと言われています。私たちは皆、私たちがしていることの代価を払っていますが、ソフトな世界には「後悔する薬」があります。特定の状態を変更した後、以前に特定の状態を保存する限り、メモモードを介して物の状態を復元できます。実際、これは「ムーンライトトレジャーボックス」でもあり、時間を戻すことができ、「魔法」という言葉は驚くべきものです。
4。クラス図の構造と説明
(1)クラス図は次のとおりです。
(2)クラスの説明(i)記念:メモの役割、主な作業は次のとおりです。
イニシエーターオブジェクトの内部状態を保存します。
Originatorオブジェクト以外のオブジェクトによって読み取られることからコンテンツを保護できます。
(ii)発信者:スポンサーの役割は、主に次のタスクを完了します。
現在の内部状態でメモオブジェクトを作成します。
メモオブジェクトを使用して、内部状態を保存します。
(iii)世話人:担当者、作業は次のように完了します。
覚書オブジェクトの保存を担当します。
メモオブジェクトの内容は保存されません。
5。例
/ ***データオブジェクト*/ public class datastate {private string action; public void setaction(string action){this.action = action; } public string getAction(){return Action; }} /***別のオブジェクトの内部状態のコピーを保存するオブジェクト。このようにして、オブジェクトは将来的には元の保存状態に復元できます。 */インポートjava.io.file; java.io.serializableをインポートします。パブリッククラスの記念品は、シリアル化可能{ /*private int numberを実装しています。プライベートファイルファイル= null; Public Memento(Originator O){this.number = o.getnumber(); this.file = o.getFile(); } public int getNumber(){return this.number; } public void setnumber(int number){this.number = number; } public file getFile(){return this.file; } public void setFile(file file){this.file = file; } */ private Datastate State; Public Memento(Originator O){this.state = o.getState(); } public DataState getState(){return state; } public void setState(DataState State){this.state = state; }}パブリッククラスオリジネーター{ /* private int number;プライベートファイルファイル= null; public Originator(){} //記念品を作成して、パラメーターとしてパブリックメントメントに渡しますpublic memento getMemento(){return new Memento(this); } //保存したデータをMementoから取り出し、元の州の公共void setMemento(Memento M){number = m.getNumber(); file = m.getFile(); } public int getNumber(){return number; } public void setnumber(int number){this.number = number; } public file getFile(){return file; } public void setFile(file file){this.file = file; }*/ private Datastate State; public Originator(){} public Originator(datastate state){this.state = state; } //記念品を作成し、パラメーターとして公開記念に渡しますpublic memento getMemento(){return new Memento(this); } //保存されたデータをMementoから取り出し、元の状態の公共void setMemento(Memento M){ / * * getMemento()によって作成されたオブジェクトがコンテナに保存されます。 *復元する必要がある場合は、現在のメソッドに渡し、getState()を使用して */ this.state = m.getState()を取得します。 } public DataState getState(){return state; } public void setState(DataState State){this.state = state; }} /** Originatorは、データのロード、Mementoオブジェクトの作成、およびMementoを使用して元のデータを復元するために使用されます*/ public class test {public static void main(string [] args){// originator originator = new Originator(); // Originator.setNumber(8); // // memento memento = originator.getMemento(); // system.out.println(memento.getnumber()); DataState state = new DataState(); state.setaction( "Copy a Character"); Originator Originator = new Originator(); system.out.println( "元のデータの作成"); Originator.setState(状態); system.out.println( "覚書オブジェクトを作成し、元のデータ状態を保存します"); memento memento = originator.getMemento(); System.out.println( "新しいデータの作成"); Originator.setState(new DataState()); system.out.println( "新しいデータを作成した後:" + originator.getState()。getAction()); /** Mementoは、特定の場所に保存され、必要に応じて取得する必要があります。 Originator.setMemento(Memento); system.out.println(originator.getState()。getAction()); }}印刷:
オリジナルのデータ作成覚書オブジェクトの作成、元のデータ状態の保存新しいデータの作成後に新しいデータを作成します。新しいデータを作成した後、元のデータコピーを復元します