Cześć

Jestem w trakcie dokształcania się i na razie nie umiem sobie wyobrazić rozwiazania problemu mechanizmu Undo/Redo w przypadku niektorych założeń. Niby wszystko proste zastosowac wzorzec stanów i polecenia, ale....
No właśnie. Jak powinno się zrealizować np taki przypadek. Mamy powiedzmy obiekt graficzny, linie i ośmiokąt i punkt. Tworzę sobie linie za pomoca polecenia utworz linie (x1, y1, x2, y2), utworz kolo (xśr., yśr, promień). Zaznaczam koło wraz z linią i zmieniam im kolor na zielony (jest to możliwe, bo są obiektami 2DGraphics) Po takim zabiegu przesuwam koło i usuwam linie. Ale teraz robię Undo i linia pojawia się ponownie, kolejne Undo i przesówam koło na ostatnią pozycję, po Redo wiadomo co ma się stać.

Teraz opis problemu, który chcę jak najlepiej ogarnąc... Chcę pamiętać ostatnie 10 kroków (czyli stos się nie sprawdzi, więc co, tablica, ale co gdy ktos chce zmienic maksymalna ilosc pamietanych kroków ?). Chcę pamiętać również polecenia makro. Co powinien przechowywać obiekt w swoim stanie ?

Moj pomysl obiekt polecenie z konkretna implementacja dla operacji możliwych do powtórzenia/cofnięcia z reprezentacją w postaci jakiegos interfejsu z metodą undo/redo. Taki obiekt posiadałby poprzedni oraz aktualny stan obiektu, ktory dekoruje. (np najwazniejsze argumenty do utworzenia go na nowo, albo coś innego nie potrafię stwiedzić co powinien przechowywać lub czy to dobry kierunek). Obawiam się też zjawiska eksplozji klas. Także proszę o porady.

Technologia
Visual C++, C# opcjonalnie Java...

Pozdrawiam

PS. Jak są jakieś literówki to sorki, ale nie skupiajcię się wówczas na tym. Oczekuję rzetelnych odpowiedzi.