これまでオンラインで見つかったすべての例とチュートリアルでは、値の加算や減算などのコマンドを扱っていました。無関係なコマンドのコマンドデザインパターン
しかし、電卓のような動作をしないコマンドがあるとどうなりますか?
Microsoft Visioのような描画プログラムを想像してください。ここでは、ユーザーが画面上のオブジェクトをx、yの位置に配置して移動します。オブジェクトの追加と削除。これらのコマンドは無関係なので、スタック内の次のコマンドが元に戻す必要のあるcreate objectコマンドである場合、現在のx、yの位置を追跡することは意味を持ちません。
これをどのように処理することをおすすめしますか?
"元に戻す"コマンドパターンは_really_ではありません。その核心は、あなたが行っている操作から実装を切り離す方法を提供します。たとえば、コマンドパターンを使ってオブジェクトを画面の中央に移動させるボタンがある場合、ボタンは単に ' moveToMiddle(obj) ' - 実際の実装が' obj.setX(width/2)であることを知る必要はありません。 obj.setY(height/2) 'のように、実装が変更される可能性があります。元に戻す場合は、Reduxの機能を確認します。各コマンドは変更され、その逆を適用してロールバックすることができます。 – vlaz
しかし、それは一貫した状態を維持することに依存しています。もっと「リラックス」なソリューションのために、以前に起こったことのスナップショットを維持するために、CommandとMementoを組み合わせることができます。そのようにコマンドをロールバックすると、スナップショットが復元されます。 – vlaz