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