Undo/Redo実装の考え方と実例

https://qiita.com/makotox/items/f284f7485106ea05c305

Undo/Redoを構成する要素

1操作を「コマンド」という概念で扱い、線形コンテナ(配列など)に積んで記録していく。次にコマンドを積む予定のコンテナ内の位置を「インデックス」として保持する。
新規コマンドを記録する際は、インデックスから後ろのコンテナ内容をクリアしてから新規コマンドをコンテナに積み、インデックスを1つ進める。
Undoでインデックスを1つ戻す、Redoで1つ進める。
インデックスが動くたびに指していたコマンド内容を実行する。進める時(Do/Redo)と戻す時(Undo)の2実装が必要。