2010-02-06 13 views
14

Jestem w procesie projektowania aplikacji i chciałbym użyć funkcji command pattern do cofania/ponawiania. Zrobiłem pewne badania wzoru poleceń, ale jedyne, czego nie dostaję, to: czy polecenie ma metody cofania i ponawiania, czy też powinienem wykonać dwa oddzielne polecenia, jeden dla cofnięcia i drugi dla ponownego wykonania, i wywołać te z polecenia samo polecenie główne?Implementowanie wzorca polecenia

Odpowiedz

11

Obiekt polecenia powinien zaimplementować funkcję cofania/ponawiania.

Polecenia są zwykle popychane i wybierane ze stosu obsługiwanego przez menedżera poleceń w celu zaimplementowania cofania wielopoziomowego. Gdy polecenia są wykonywane, są one popychane na stos, a kiedy są cofane, są wyskakiwane ze stosu.

Wzorzec memento byłby używany w połączeniu ze wzorcem poleceń, nie zastępuje użycia wzorca polecenia. Byłby używany do utrzymywania stanu wymaganego do operacji cofania.

+1

Dodam, że lepszym rozwiązaniem nie jest zwykły stos. Zamiast tego potrzebujesz listy i odniesienia do bieżącego elementu. Cofanie spacerów z powrotem do referencji, a * ponowne wybieranie * idzie do przodu. Używanie stosu nie pozwala na ponowienie. – munificent

+1

Użyłem 2 stosów, cofania i ponawiania stosu. Jeśli cofniesz akcję, wyskakuje ze stosu cofania i przesuwa się na stos redo. Dodanie nowej akcji powoduje przejście do stosu cofania i wyczyszczenie stosu powtórzeń. – Wout

2

Możesz również rozważyć wzorzec memento, użyjemy go i zadziała genialnie, aby cofnąć.

+0

Czy wzorzec memento będzie mniej czasochłonny do implementacji niż wzorzec poleceń, gdy chcę go tylko cofnąć? – slayerIQ

+0

@slayerIQ Wzorzec memento byłby używany w połączeniu ze wzorcem poleceń, nie zastępuje użycia wzorca polecenia. – David

+0

A więc pamiątka będzie zawierała cofanie i powtarzanie stosów, a stosy będą zawierały polecenia, czy mam rację? – slayerIQ

Powiązane problemy