Wzorce projektowe – czynnościowe Command Strategy

Transkrypt

Wzorce projektowe – czynnościowe Command Strategy
WYKŁAD 10
Wzorce projektowe – czynno ciowe
Command
Strategy
Behavioral Design Pattern: Command [obj]
Kapsułkuje dania w postaci obiektu, co
umo liwia parametryzowanie klientów
ró nymi daniami, kolejkowanie da lub
zapisywanie ich w dziennikach, a tak e
ułatwia implementacj anulowanych
operacji.
Inne nazwy: Akcja, Transakcja
Uzasadnienie:
Czasem istnieje potrzeba wydawania da obiektom bez
jakiejkolwiek wiedzy o danej operacji lub odbiorcy
dania. Przykładem mog by elementy GUI takie jak
przyciski lub menu. Obiekty te s odpowiedzialne za
wykonywanie da w odpowiedzi na akcje u ytkownika.
dania te zale jednak od zastosowania. Obiekty graficzne
nie mog go zna ani nie mog go w sobie implementowa .
Rozwi zaniem jest przekształcenie dania w obiekt. Obiekt
ten mo na przekazywa . Klasa Polecenie deklaruje interfejs
do ró nych działa , np. jednooperacyjny Wykonaj().
Podklasy konkretne okre laj pary odbiorca- akcja pami taj c
odbiorc jako zmienn i implementuj c Wykonaj() w celu
wywołania dania. Odbiorca ma wiedz wymagan do
spełnienia dania.
Dobrym przykładem jest implementacja
Menu. Ka dy element menu jest obiketem
klasy ElementMenu. Klasa Aplikacja
tworzy menu i jego elementy wraz z reszt
interfejsu u ytkownika. Kontroluje ona te
na bie co obiekty Dokument otwarte przez
u ytkownika.
Aplikacja konfiguruje ka dy obiekt klasy
ElementMenu za pomoc obiektu podklasy
konkretnej Polecenia. Gdy u ytkownik wybierze
ElementMenu, ten wywołuje Wykonaj() ze
swojego obiektu Polecenia. Obiekty klasy
ElementMenu nie wiedz której podklasy
Polecenia u ywaj . Podklasy Polecenia
przechowuj odbiorc
dania i wywołuj jedn
lub wi cej jego operacji.
Czasami pojawia si te konieczno
wykonania całego ci gu polece . Aby
realizowa takie ci gi polece mo na
zdefiniowa klas MakroPolecenie, która
mo e wykona nieograniczony ci g polece
przez ni okre lony.
Wzorzec Command rozdziela obiekt wywołuj cy
operacj od obiektu, który wie jak j wykona .
Daje to elastyczno przy projektowaniu interfejsu
u ytkownika. Mo na np. zapewni aby ta sama
operacja była wywoływana zarówno z Menu jak i
przez przycisk dzi ki korzystaniu przez nie z tego
samego obiketu klasy konkretnej Polecenia.
Polecenia mo na wymienia dynamicznie, co
przydaje si przy menu zale nym od kontekstu.
Mo na te tworzy skrypty z polece przez
składanie ich z fragmentów (por. nagrywanie
makr np. w aplikacjach MS Office).
Stosowalno :
• sparametryzowanie obiektów wykonywan akcj (jak
ElementMenu) – w j zykach proceduralnych odpowiada to
funkcjom zwrotnym (callbacks)
• specyfikowanie, kolejkowanie i spełnianie da w
ró nym czasie – mo na przesyła obiekty dania do
innych procesów i tam je realizowa
• uzgl dnienia anulowania wprowadzanych zmian –
operacja Wykonaj() z obiektu Polecenie mo e zapami ta
stan (lista stanów) potrzebny do cofni cia skutków jej
działania przez operacj AnulujWykonanie()
• umo liwienie wpisywania zmian do
dziennika, tak aby w razie niepowodzenia
(nawet awaria systemu) mo na było je
ponownie wykona – konieczno dodania
operacji Zapisz() i Wczytaj() do interfejsu
Polecenia
• stworzenie systemu wokół operacji
wysokiego poziomu zbudownych z operacji
pierwotnych – systemy transakcyjne
Struktura:
Uczestnicy:
• Polecenie
– deklaruje interfejs do wykonywania operacji
• PolecenieKonkretne (PolecenieWklej,
PolecenieOtwórz)
– definiuje powi zanie mi dzy obiektem
Odbiorca i akcj
– implementuje operacj Wykonaj() przez
wywołanie odpowiednich operacji Odbiorcy
• Klient (Aplikacja)
– worzy obiekt klasy PolecenieKonkretne i ustala
jego odbiorc
• Wywołuj cy (ElementMenu)
– prosi polecenie o spełnienie dania
• Odbiorca (Dokument, Aplikacja)
– wie jak wykona operacje zwi zane ze
spełnieniem dania; Odbiorc mo e by
dowolna klasa
Współpraca:
• Klient tworzy obiekt PolecenieKonkretne i podaje
jego odbiorc
• ObiektWywołuj cy przechowuje obiekt
PolecenieKonkretne
• Wywołuj cy zgłasza danie, wywołuj c operacj
Wykonaj() Polecenia; je li jest wycofywalne, to
najpierw zapami tuje stan
• obiekt PolecenieKonkretne wywołuje operacje
swojego odbiorcy w celu spełnienia dania
Konsekwencje:
• Polecenie oddziela obiekt, który wywołał operacj
od tego, który wie jak j wykona
• Polecenia s obiektami – mog by przetwarzane
tak jak inne obiekty
• z poszczególnych polece mo na tworzy
polecenia zło one – przykład MakroPolecenie;
ogólnie polecenia zło one s obiektami z wzorca
Composite
• mo na łatwo dodawa nowe polecenia bez
modyfikowania istniej cych klas
Implementacja:
• na ile inteligentne powinno by polecenie?
• mo liwo anulowania i przywracania
operacji
• unikanie narastania bł dów w procesie
anulowania operacji
• stosowanie szablonów z C++
Przykłady
Zastosowania
Pokrewne wzorce:
• Composite – do implementowania
MakroPolecenia
• Memento – do pami tania stanu potrzebnego do
anulowania operacji
• Prototype – Polecenie, które musi by skopiowane
przed umieszczeniem go na li cie działa jak
Prototype
Behavioral Design Pattern: Strategy [obj]
Definiuje rodzin algorytmów, kapsułkuje
ka dy z nich i umo liwia ich wymian .
Sprawia, e mo liwe staje si zmienianie
algorytmu niezale nie od u ywaj cych go
klientów.
Uzasadnienie:
W edytorach tekstu stosuje si wiele algorytmów
dziel cych tekst na wiersze. Jednak algorytmów
takich nie powinni my umieszcza na sztywno w
klasach, poniewa :
• klienci wymagajacy dzielenia tekstu na wiersze staj
si skomplikowani
• ró ne algorytmy s odpowiednie w ró nych
sytuacjach, ale mo emy niepotrzebowa wszystkich
• trudno jest dodawa lub zmienia algorytmy gdy
podział na wiersze jest cz ci klienta
Aby unikn tych problemów mo emy
zdefiniowa klasy, które kapsułkuj
poszczególne algorytmy podziału na
wiersze. Zakapsułkowany w ten sposób
algorytm nazywamy strategi .
ObiektZło ony jest odpowiedzialny za
utrzymywanie i uaktualnianie przej do
nowych wierszy w tek cie. Strategie
podiału na wiersze nie s jednak
zaimplementowane w niej, lecz oddzielnie
w klasach konkretnych klasy Składacz.
Podklasy konkretne klasy Składacz
implementuj ró ne strategie.
• Składacz prosty – w danej chwili wyznacza
jedno przej cie do nowego wiersza
• SkładaczTeXowy – optymalizuje globalnie
od razu dla całego akapitu zestaw przej do
nowej linii
• SkładaczTablicowy – tak dobiera przej cia
do nowego wiersza aby ka dy wiersz miał
tyle samo elementów
ObiektZło ony ma odwołanie do obiektu
Składacz. Przy ka dym formatowaniu
przekazuje on odpowiedzialno do
wybranego przez siebie obiektu Składacz
konkretny.
Stosowalno :
• wiele powi zanych ze sob klas ró ni si tylko
zachowaniem – strategie umo liwiaj konfigurowanie
klasy za pomoc jednego z wielu zachowa
• potrzebne s ró ne warianty jakiego algorytmu
• w algorytmie s u ywane dane, o których klient nie
powinien wiedzie – ukrycie ich w algorytmach
• kasa definiuje wiele zachowa , które w jej metodach s
obło one wielokrotnymi instrukcjami warunkowymi –
mo na unikn objawu wskazuj cego na nadmiern
strukturalno kodu
Struktura:
Uczestnicy:
• Strategia (Składacz)
– deklaruje interfejs wspólny dla wszystkich
obsługiwanych algorytmów; Kontekst
wykorzystuje ten interfejs do wykonywania
algorytmu zdefiniowanego przez
Strategi Konkretn
• StrategiaKonkretna (SkładaczProsty,
SkładaczTeXowy, SkładaczTablicowy)
– implementuje algorytm wykorzystuj c interfejs
z klasy Strategia
• Kontekst (ObiketZło ony)
– jest konfigurowany za pomoc obiektu
StrategiaKonkretna
– utrzymuje odwołanie do obiektu Strategia
– mo e definiowa interfejs umo liwiaj cy
Strategii uzyskanie dost pu do swoich
danych
Współpraca:
• klasy Strategia i Kontekst współdziałaj w celu
zastosowania wybranego algorytmu – Kontekst
mo e przekaza potrzebne dane albo samego
siebie (wtedy mo liwo odwoła zwrotnych)
• Kontekst przekazuje dania od klientów do
swojej strategii – zwykle klienci tworz obiekt
StrategiaKonkretna i przekazuj go do kontekstu,
a potem komunikuj si wył cznie z kontekstem
Konsekwencje:
• rodziny powi zanych ze sob algorytmów
• alternatywa dla tworzenia podklas
• eliminacja instrukcji warunkowych
• wybór implementacji
• klienci musz by wiadomi istnienia ró nych strategii
• koszty zwi zane z komunikacj mi dzy Strategi a
Kontekstem
• zwi kszona ilo obiektów – rozwi zaniem jest wtedy
wzorzec obiektowy FlyWeight
Implementacja:
• definiowanie interfejsów Strategii i Kontekstu
• strategie jako parametry szablonów – wtedy
eliminacja klasy abstrakcyjnej Strategia
• dooprowadzenie do tego aby obiekty klasy
Strategia były opcjonalne – mo liwo
wprowadzenia domy lnego zachowania Kontekstu
Przykłady
Zastosowania
Pokrewne wzorce:
• Flyweight – obiekty Strategia s cz sto
dobrymi kandydatami na pyłki.