>>744
渾身のageで気付いたよん。
汚く妥協するって、具体的にどうすることを指してる?

図形の移動操作中にずっとMoveCommandが発行されるわけではないよ。
GoF本Mementパターンの例は、
コマンドの実行が確定した時点でCommandオブジェクトが生成されて、
そのときの差分がMementとして作られることを示している。

たとえば、平面上のShapeを次のように動かすとする。
初期状態:(1, 1)
[1] (1,1) → (2, 3) に移動させる
[2] (2, 3) → (3, 1) に移動させる

[1] や [2] の操作中にShapeをドラッグしているときは、移動は確定していない。
アプリは、グラフィカルに何らかの描画をしていることだろう。

[1] が確定した時点で MoveCommand を生成する。
移動開始点と移動先の差分から移動量(1, 2)というMementオブジェクトを作り、
MoveCommand にインスタンス変数としてセットする。
(おそらくこのMoveCommandオブジェクトは、何らかのCommandキューに入れられることになる)
[2] が確定した時点では、同様にして移動量(1, -2)のMementをもつMoveCommandが作られる。

サンプルコードのようにすれば、きれいにRedo/Undoを実装できる。