6

元に戻すなど、オブジェクトを以前の状態に戻すには、Memento デザイン パターンが使用されます。ただし、取り消しとやり直しは複数回実行できます。私は記事を何度も読みましたが、それらが互いに類似しているか補完しているか、一緒に使用できるかについてはまだ不明です.

State パターンを Memento Design パターンに関連付けたり、一緒に使用したりできますか?

4

3 に答える 3

3

Memento の「状態」は、後で取得するために保存した状態です。ブックマークのようなものです。たとえば、ビデオの位置を保存してから、Memento パターンを使用してその位置に戻ることができます。(状態は Caretaker 参加者に保存されます。)

State Design パターンの「ステート」は、ステート マシン (またはステート エンジン) に見られるものと似ています。それらは、各状態に有限の一連の動きがある、より大きなコンテキストのように機能します。したがって、「オン」状態にある場合、オプションは「オン」状態のままにするか、「オフ」状態に変更することです。(状態パターンには条件文がありません!)

両方の PHP の例については、以下を参照してください。

http://www.php5dp.com/category/design-patterns/memento/

http://www.php5dp.com/category/design-patterns/state/

于 2014-07-31T01:26:56.023 に答える
3

「状態パターン」の「状態」は、記念品パターンが可能にするのと同じ種類の状態ではありません。状態パターンのより適切な名前は「モード パターン」です。詳細については、この説明を参照してください。

ここで、モードパターンが関与するオブジェクトの状態を説明するために記念品を使用することがありますが、それはオブジェクトが持つ唯一の特定の関係です。

于 2013-08-24T19:51:41.683 に答える
2

最初の質問に答えるために、2 つ目の memento インスタンスを作成してやり直しの「状態」を保存することにより、memento を使用してやり直すことができます。ただし、オブジェクトの状態を格納する複雑さによっては、コマンド パターンを使用して元に戻す/やり直し機能を提供する方が「安価」であることがよくあります。Command は元に戻す/やり直しの変更のみを保存するために使用できますが、memento はおそらく状態全体を保存する必要があります。

トールセスの答えは、状態パターンからの「状態」がメメントが保存する「状態」と同じではないということも正しいです。

于 2013-08-26T02:00:43.017 に答える