ある種の二分木構造のエディターを開発していますが、元に戻す機能が必要です。これを実現するためにコマンドパターンを使用することを考えました。しかし、二分木構造でコマンドパターンを使用する方法をまだ見つけることができませんでした。
二分木構造は、ポインタを介して構成されています。したがって、ノードはその親とその子を知っています。ここでノードを追加したい場合NodeAdd
は、親をパラメーターとしてオブジェクトを作成し、それをに渡しますUndoStack
。既存のノードを削除するために、オブジェクトはasパラメーターへのポインターとともにNodeRemove
に渡されます。との両方を実装する必要があります(オブジェクトがに置かれるときに呼び出される場所)。UndoStack
Node
NodeAdd
NodeRemove
undo()
redo()
redo()
UndoStack
私が直面している問題は、ノードの削除とその後の同じノードの追加を元に戻す必要がある状況に対処することです。
- NodeAddをやり直します
- NodeRemoveをやり直します
- NodeRemoveを元に戻す
- NodeAddを元に戻す
REDO NodeRemoveが実行されると、Node
オブジェクトは破棄されます。undo NodeRemoveで新しいNode
オブジェクトを再構築できますが、新しく構築されたへのポインターがないため、undoNodeAddを実行できませんでしたNode
。
コマンドパターンを間違った方法で使用しようとしていると思います。/内ではなく、コマンドのコンストラクタ/Node
デストラクタ内ではなく、オブジェクトを破棄または構築する必要があります。残念ながら、この種の構造でこれを行う方法がわかりません。私が見つけたすべての例とアドバイスは、テキスト編集またはポインターを使用した動的構造がないものの編集に関連しています。undo()
redo()
この問題に取り組む方法について何かアイデアはありますか?