2016-12-13 4 views
0

これまでオンラインで見つかったすべての例とチュートリアルでは、値の加算や減算などのコマンドを扱っていました。無関係なコマンドのコマンドデザインパターン

しかし、電卓のような動作をしないコマンドがあるとどうなりますか?

Microsoft Visioのような描画プログラムを想像してください。ここでは、ユーザーが画面上のオブジェクトをx、yの位置に配置して移動します。オブジェクトの追加と削除。これらのコマンドは無関係なので、スタック内の次のコマンドが元に戻す必要のあるcreate objectコマンドである場合、現在のx、yの位置を追跡することは意味を持ちません。

これをどのように処理することをおすすめしますか?

+0

"元に戻す"コマンドパターンは_really_ではありません。その核心は、あなたが行っている操作から実装を切り離す方法を提供します。たとえば、コマンドパターンを使ってオブジェクトを画面の中央に移動させるボタンがある場合、ボタンは単に ' moveToMiddle(obj) ' - 実際の実装が' obj.setX(width/2)であることを知る必要はありません。 obj.setY(height/2) 'のように、実装が変更される可能性があります。元に戻す場合は、Reduxの機能を確認します。各コマンドは変更され、その逆を適用してロールバックすることができます。 – vlaz

+1

しかし、それは一貫した状態を維持することに依存しています。もっと「リラックス」なソリューションのために、以前に起こったことのスナップショットを維持するために、CommandとMementoを組み合わせることができます。そのようにコマンドをロールバックすると、スナップショットが復元されます。 – vlaz

答えて

0

「軸上のオブジェクトの移動」+適切なコマンドが「オブジェクト」であるとします。次に、コマンドパターンはそのオブジェクトとコマンドを含むコマンドを処理します。そのため、コマンドパターンは「オブジェクトの状態を保持する」ことを意味しません。入力オブジェクトが同じでも異なっても、毎回同じです。

計算機の場合、「削除コマンド」は「オブジェクト削除コマンド」と同じです。

ここまでの説明では、動くオブジェクトにコマンドパターンを使用する目的は何ですか?

+0

私は現在、コマンドパターンを使用していません。私はそれを私のアプリケーションにアンドゥ/リドゥ機能を追加するための解決策と考えていました。私はこの類似の質問をここで見つけたhttp://stackoverflow.com/questions/3250104/fast-undo-redo-with-memento-command-pattern – sjs

関連する問題