Implementacja akcji Undo/Redo

0

Myślałem, że mam proste zadanie w postaci implementacji akcji undo i redo ale trochę mi się to wszystko pomieszało i sam chyba zagmatwałem. Czytałem o wzorcu memento ale nie bardzo wiem jak go mam w moim przypadku użyć więc póki co zrobiłem tak i rozwiązanie nie jest pełne - działa to dobrze dla przypadków typu undo-undo-redo-redo ale sekwencja undo-redo-undo-redo już** nie działa** pewnie jakiś głupi błąd strzeliłem ale go teraz nie widzę po prostu :(

LinkedList<State> stateCache = new LinkedList<>(); //tutaj przechowuje zmiany stanów
LinkedList<State> movesUndoned = new LinkedList<>(); //tutaj stany cofnięte

   public void stateChanged(State newState){
    stateCache.add(stanObecny); //stanObecny to nowy obiekt na podstawie this.state
    this.state = newState;
   }

   public void undo() {
        movesUndoned.add(stanObecny);
        this.state= stateCache.getLast();
        stateCache.removeLast();
    }

    public void redo()  {
        stateCache.add(stanObecny);
        this.state= movesUndoned.getLast();
        movesUndoned.removeLast();
    }
0

A jak się przechodzi na stanobecny?

0

Nie bardzo wiem co masz na myśli. Ja to widzę tak, że stan w wyniku działania zmiena się stan i możemy użyć opcji redo i undo. Przykładowo mam stan X wołamy undo i mam X-1 wołam jeszcze raz undo i mam X-2 następnie wołam redo i mamy X-1. itd...

1

Zamiast mieć dwie listy nie lepiej jakbyś miał jedną i poruszał się używając indeksu?

0

Chodzi mi o to co to jest stanobecny, stanobecny = ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1