16

私はMementoパターンについていくつかの調査を行っていますが、一般的に行動パターンに慣れておらず、調査によってかなり混乱しています。私が混乱している主なことの1つは、Mementoパターンとシリアル化の違いです。

私が収集できるものから、両方を使用してオブジェクトを保存し、後日持ち帰ることができますが、それらの主な違いが何であるかについて明確な答えを見つけることができませんでした、おそらく私は私の研究で何かを逃しましたしかし、私は誰かが2つの違いが何であるかについていくつかの光を当てることができるかどうか疑問に思いました。

ありがとう

4

4 に答える 4

17

通常、Mementoパターンは、ロールバック/セーブポイントのサポートを実装するために使用されます。たとえば、ある時点でのオブジェクトの状態をマークし、何らかの作業を行ってから、そのオブジェクトをマークされたポイントに戻すことを決定したい場合があります。

Mementoパターンの実装では、シリアル化を使用できます。これには、オブジェクトの内容をbyte []に​​保存し、メモリに保持するか、ディスクに書き込む必要があります。オブジェクトのコンテンツを元に戻すと、シリアル化されたコピーから再構築されます。

逆に、オブジェクトをメモリに複製し、コピーへの参照を保持し、オブジェクトを元に戻す必要がある場合は状態をコピーして戻すことで、Mementoパターンを実装できます。この方法では、シリアル化は使用されません。

于 2012-12-28T22:54:23.237 に答える
8

Mementoパターンは、オブジェクトの以前の状態をメモリに保持するために使用されるOOデザインパターンです。たとえば、「元に戻す」操作を実装すると便利です。

シリアル化は、オブジェクトのグラフをバイト配列に変換して、ディスクに保存したり、ネットワーク経由で別のJVMに送信したりするプロセスです。共通点はあまりありません。

于 2012-12-28T22:55:31.360 に答える
2

Memento は、オブジェクトを以前の状態に復元する (ロールバックによる元に戻す) 機能を提供するソフトウェア設計パターンです。

記念品の 構造:

ここに画像の説明を入力

memento パターンは、 originatorcaretakermementoの 3 つのオブジェクトで実装されます。

オリジネーターは、内部状態を持つオブジェクトです。

管理人は発信者に何かをしようとしていますが、変更を取り消すことができるようにしたいと考えています。管理人は最初に作成者に記念品を要求します。次に、実行しようとしていた操作 (または一連の操作) を実行します。操作前の状態にロールバックするために、mementoオブジェクトをoriginatorに返します。

シリアル化は、オブジェクトの状態を永続化するために使用されます。デザインパターンではありません。Serializationの詳細については、この SE の質問を参照してください。

ファイルへの/からのオブジェクトの書き込みと読み取り以外のSerializableの使用

MementoパターンはSerializationを使用する場合と使用しない場合があります。memento オブジェクトが JVM を離れていないか、リモート呼び出しを介して他のサービスに渡されていない場合、memento はSerializationなしでオブジェクトの状態をメモリに保存できます。保存されたオブジェクトは、後で状態を変更するために使用できます。

詳細については、ソース作成の記事を参照してください

于 2016-07-15T05:44:28.257 に答える
1

名前のとおりのデザインパターンは、デザインの問題に対処することを意味します。

シリアル化は、オブジェクトを「凍結乾燥」する方法です。

したがって、シリアル化は、Mementoパターンを実装できる実装メカニズムである可能性があります。

ただし、シリアル化を使用せずに、同じように簡単にmementoパターンを実装できます。

于 2012-12-28T22:56:50.580 に答える