UNDO および REDO オプションを実装したいと考えています (MS Word などで見られるように)。そのためのデータ構造を提案してもらえますか?どうすれば実装できますか?
pragadheesh
質問する
38641 次
5 に答える
111
これはデータ構造ではなく、デザイン パターンです。Command Patternを探しています。
標準では、Command オブジェクトをスタックに保持して、複数レベルの取り消しをサポートします。やり直しをサポートするために、2 番目のスタックは元に戻したすべてのコマンドを保持します。したがって、元に戻すスタックをポップしてコマンドを元に戻すと、ポップした同じコマンドがやり直しスタックにプッシュされます。コマンドをやり直すときは、同じことを逆に実行します。やり直しスタックをポップし、ポップされたコマンドを元に戻すスタックにプッシュします。
于 2009-03-31T14:07:24.140 に答える
39
実際、この機能の標準パターン (Gang of Four でさえ) はMementoです。
また、ほとんどのプログラムは Undo/Redo スタックを使用していますが、特定のテキスト エディターの愛好家は Undo/Redoツリーを好みます。これにより、いくつかのコマンドを元に戻したり、新しいコマンドを試したり、考えを変えたりしても、履歴全体が失われることはありません。
于 2009-05-26T10:30:44.723 に答える
2
Objective-C Cocoa には、十分に文書化された NSUndoManager という名前のanwserがあります。
于 2009-03-31T14:13:53.267 に答える