Wzorce czynnościowe - Łańcuch zobowiązań, Mediator, Metoda szablonowa, Obserwator, Strategia, Stan Flashcards

1
Q

Wzorce czynnościowe

A
  • łańcuch zobowiązań
  • mediator
  • metoda szablonowa
  • obserwator
  • stan
  • strategia
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Łańcuch zobowiązań - nazwy

A

ang. chain of responsibility

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Łańcuch zobowiązań - typ

A

obiektowy, czynnościowy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Łańcuch zobowiązań - Przeznaczenie

A

Pozwala uniknąć wiązania nadawcy żądania z jego odbiorcą, ponieważ umożliwia obsłużenie żądania więcej niż jednemu obiektowi. Łączy w łańcuch obiekty odbiorcze i przekazuje między nimi żądanie do momentu obsłużenia go.

Łańcuch takich obiektów tworzy listę jednokierunkową, w której odpowiedzialność za przetworzone żądanie spada na najlepiej przygotowany do tego obiekt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Łańcuch zobowiązań - Uzasadnienie

A

Używając systemu pomocy, możemy chcieć uzyskać pomoc dotyczącą konkretnego elementu. Jesli ten element nie obsługuje udzielania pomocy przekaże to następnemu.

Pierwszy obiekt w łańcuchu odbiera żądanie i albo je obsługuje, albo przekazuje do następnego kandydata, a ten robi to samo. Obiekt zgłaszający żądanie nie wie, który obiekt je obsłuży. Można powiedzieć, że żądanie ma niejawnego odbiorcę.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Łańcuch zobowiązań - Warunki stosowania

A
  • Kiedy więcej niż jeden obiekt może obsłużyć żądanie, a nie wiadomo z góry, który z nich to zrobi. Obiekt obsługujący żądanie powinien być ustalany automatycznie.
  • Jeśli chcesz przesyłać żądanie do jednego z kilku obiektów bez bezpośredniego określania odbiorcy.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Łańcuch zobowiązań– Elementy i współdziałanie

A

• Handler - obiekt obsługujący:

  • definiuje interfejs do obsługi żądań;
  • (opcjonalnie) obejmuje implementację odwołania do następnika.

• ConcreteHandler - konkretny obiekt obsługujący:

  • obsługuje żądania, za które odpowiada;
  • może uzyskać dostęp do następnika;
  • jeśli obiekt ConcreteHandler potrafi obsłużyć żądanie, robi to; w przeciwnym razie przekazuje je do następnika.

• Client:
- inicjuje żądanie kierowane do obiektu ConcreteHandler wchodzącego w skład łańcucha.

• Kiedy klient zgłosi żądanie, będzie ono przekazywane wzdłuż łańcucha do czasu, kiedy obiekt ConcreteHandler nie podejmie się jego obsługi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Łańcuch zobowiązań– Konsekwencje

A
    • Zapewnia mniejsze powiązanie. Wzorzec ten sprawia, że obiekty nie muszą wiedzieć, który z innych obiektów obsługuje żądanie. Obiekt potrzebuje jedynie informacji o tym, że żądanie zostanie właściwie obsłużone.
    • Zwiększa elastyczność w zakresie przypisywania zadań obiektom. Łańcuch zobowiązań zwiększa elastyczność przy podziale zadań między obiekty
    • Nie zapewnia gwarancji odbioru żądania. Ponieważ żądanie nie ma jawnego odbiorcy, nie ma gwarancji, że zostanie obsłużone.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Łańcuch zobowiązań– Implementacja

A
  • Łączenie następników. Jeśli nie można zdefiniować łańcucha za pomocą istniejących referencji, trzeba je dodać samodzielnie.
  • Implementowanie łańcucha następników. Łańcuch następników można zaimplementować na dwa sposoby:
  • przez zdefiniowanie nowych powiązań (zwykle w klasie Handler, ale można to zrobić także w klasach ConcreteHandler);
  • przez wykorzystanie istniejących powiązań.

• Reprezentowanie żądań. Żądania można reprezentować na różne sposoby. W najprostszej wersji żądanie jest zapisanym na stałe wywołaniem operacji. Jest to wygodne i bezpieczne, jednak pozwala przekazywać tylko stały zestaw żądań zdefiniowanych w klasie Handler. Inna możliwość to zastosowanie pojedynczej funkcji obsługi żądania przyjmującej jako parametr kod żądania (na przykład stałą w postaci liczby całkowitej lub łańcucha znaków).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Łańcuch zobowiązań– Powiązane wzorce

A

Często występuje ze wzorcem kompozyt (obiekt nadrzędny pełni rolę jego następnika)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Mediator - nazwy

A

ang. mediator

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Mediator - typ

A

obiektowy, czynnościowy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Mediator - Przeznaczenie

A

Określa obiekt kapsułkujący informacje o interakcji między obiektami z danego zbioru. Wzorzec ten pomaga zapewnić luźne powiązanie, ponieważ zapobiega bezpośredniemu odwoływaniu się obiektów do siebie i umożliwia niezależne modyfikowanie interakcji między nimi. Innymi słowy mediator jest pośrednikiem w komunikacji pomiędzy wieloma obiektami – obiekty te znają tylko mediatora, natomiast mediator zna wszystkie obiekty systemu (topologia gwiazdy).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Mediator - Uzasadnienie

A
  • Projekt obiektowy zachęca do rozmieszczania zachowań w różnych obiektach. Może to prowadzić do powstania struktury obiektów z wieloma powiązaniami. W najgorszym przypadku każdy obiekt wie o istnieniu wszystkich pozostałych.
  • Między widgetami z okna dialogowego często występują zależności. Na przykład przycisk może być nieaktywny, jeśli określone pole na dane wejściowe jest puste. Zaznaczenie pozycji na liście opcji (tak zwanej liście rozwijanej) może spowodować zmianę zawartości pola na dane wejściowe. I na odwrót — wprowadzenie tekstu w takim polu może spowodować automatyczne zaznaczenie jednej lub kilku pozycji na liście rozwijanej. Kiedy w polu na dane wejściowe pojawi się tekst, system może udostępnić inne przyciski umożliwiające użytkownikowi wykorzystanie tego tekstu, na przykład zmodyfikowanie lub usunięcie elementu, którego on dotyczy.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Mediator - Warunki stosowania

A
  • Zestaw obiektów komunikuje się w dobrze zdefiniowany, ale skomplikowany sposób. Powstałe w wyniku tego zależności są nieustrukturyzowane i trudne do zrozumienia.
  • Powtórne wykorzystanie obiektu jest trudne, ponieważ odwołuje się on do wielu innych obiektów i komunikuje się z nimi.
  • Dostosowanie zachowania rozproszonego po kilku klasach nie powinno wymagać tworzenia wielu podklas.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Mediator - Elementy i współdziałanie

A

• Mediator:
- definiuje interfejs do komunikowania się z obiektami współpracującymi.

• ConcreteMediator:

  • zapewnia współdziałanie przez koordynowanie obiektów współpracujących;
  • zna powiązane z nim obiekty współpracujące i zarządza nimi.

• Klasy z rodziny Colleague , czyli klasy współpracujące:

  • każdy obiekt współpracujący zna powiązany z nią obiekt Mediator;
  • każdy obiekt współpracujący komunikuje się z mediatorem zamiast z innymi takimi obiektami.

• Obiekty współpracujące wysyłają i przyjmują żądania za pośrednictwem obiektu Mediator.

Mediator zapewnia współdziałanie przez przekazywanie żądań między odpowiednimi współpracownikami.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Mediator - Konsekwencje

A
    • Ogranicza tworzenie podklas. Mediator pozwala umieścić w jednym miejscu zachowanie, które standardowo trzeba rozproszyć między kilka obiektów.
    • Rozdziela obiekty współpracujące. Mediator ułatwia zachowanie luźnego powiązania między obiektami współpracującymi.
    • Upraszcza protokoły obiektów. Mediator pozwala zastąpić interakcje typu wiele do wielu komunikacją typu jeden do wielu (między mediatorem i powiązanymi z nim współpracownikami).
  • +/- Centralizuje sterowanie. Wzorzec Mediator pozwala zamienić złożoność interakcji na złożoność samego mediatora (uwaga na antywzorzec „god class”)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Mediator - Implementacja

A
  • Pominięcie klasy abstrakcyjnej Mediator. Jeśli obiekty współpracujące korzystają z tylko jednego mediatora, nie trzeba definiować klasy abstrakcyjnej Mediator.
  • Komunikacja między współpracownikami i mediatorem. Obiekty współpracujące muszą komunikować się z mediatorem, kiedy wystąpi istotne zdarzenie. Jedną z możliwości jest zaimplementowanie klasy Mediator jako obserwatora.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Mediator - Powiązane wzorce

A
  • Fasada - działa podobnie, jednak jest jednokierunkowa (kieruje żądania do klas podsystemu).
  • Obserwator - obiekty współpracujące mogą komunikować się z mediatorem za tego wzorca.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Obserwator - nazwy

A

ang. observer

pol. obiekty zależne
ang. dependents

pol. publikuj-subskrybuj
ang. publish-subscribe

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Obserwator - typ

A

obiektowy, czynnościowy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Obserwator - Przeznaczenie

A

Określa zależność jeden do wielu między obiektami. Kiedy zmieni się stan jednego z obiektów, wszystkie obiekty zależne od niego są o tym automatycznie powiadamiane i aktualizowane.

Zaletą użycia tego wzorca projektowego jest luźne powiązanie pomiędzy klasami oraz możliwość dynamicznej zmiany tych powiązań. Klasy obserwatorów jak i obiektów obserwujących nie muszą o sobie wiele wiedzieć, przez co nie tworzą się niepotrzebne zależności.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Obserwator - Uzasadnienie

A

• Typowym efektem ubocznym podziału systemu na kolekcję współdziałających klas jest konieczność zachowania spójności między powiązanymi obiektami. Niepożądane jest jednak osiąganie tego przez tworzenie ściśle powiązanych klas, ponieważ zmniejsza to możliwość ich powtórnego wykorzystania.

24
Q

Obserwator - Warunki stosowania

A
  • Jeśli zmiana w jednym obiekcie wymaga zmodyfikowania drugiego, a nie wiadomo, ile obiektów trzeba przekształcić.
  • Jeżeli obiekt powinien móc powiadamiać inne bez określania ich rodzaju. Oznacza to, że obiekty nie powinny być ściśle powiązane.
25
Q

Obserwator - Elementy i współdziałanie

A

• Subject, czyli podmiot:

  • zna powiązane z nim obserwatory; podmiot może obserwować dowolna liczba obiektów Observer;
  • udostępnia interfejs do dołączania i odłączania obiektów Observer.
  • Observer: - definiuje interfejs do aktualizacji dla obiektów, które należy powiadamiać o zmianach podmiotu.
  • ConcreteSubject, czyli podmiot konkretny:
  • przechowuje stan istotny dla obiektów ConcreteObserver;
  • kiedy zmieni się jego stan, wysyła powiadomienie do powiązanych z nim obserwatorów.

• ConcreteObserver:

  • przechowuje referencję do obiektu ConcreteSubject;
  • przechowuje stan, który powinien być spójny ze stanem podmiotu;
  • obejmuje implementację interfejsu do aktualizacji z klasy Observer potrzebną do tego, aby zachować spójność stanu obiektu ConcreteObserver ze stanem podmiotu.

• Obiekt ConcreteSubject powiadamia obserwatory o każdej zmianie, która mogłaby spowodować, że stan tego obiektu będzie niespójny ze stanem obserwatorów. Obiekt ConcreteObserver po otrzymaniu powiadomienia o zmianie obiektu ConcreteSubject może wysłać do niego zapytanie o informacje. Na podstawie tych danych obiekt ConcreteObserver dostosowuje swój stan do stanu podmiotu.

26
Q

Obserwator - Konsekwencje

A
    • Abstrakcyjne powiązanie między obiektami Subject i Observer. Podmiot zna tylko listę obserwatorów, a każdy z nich jest zgodny z prostym interfejsem klasy abstrakcyjnej Observer. Podmiot nie zna klasy konkretnej żadnego z obserwatorów. Dlatego powiązanie między podmiotami i obserwatorami jest abstrakcyjne i minimalne.
    • Obsługa rozsyłania grupowego komunikatów. Podmiot przy wysyłaniu powiadomień — inaczej niż w przypadku zwykłych żądań — nie musi określać odbiorcy.
    • Nieoczekiwane aktualizacje. Ponieważ obserwatory nie wiedzą o swoim istnieniu, mogą nie znać ostatecznych kosztów zmodyfikowania podmiotu. Na pozór bezpieczna operacja na obiekcie może spowodować kaskadę aktualizacji w obserwatorach i zależnych od nich obiektach.
27
Q

Obserwator - Implementacja

A
  • Kapsulkowanie złożonej semantyki aktualizacji. Jeśli relacja zależności między podmiotami i obserwatorami jest wyjątkowo złożona, czasem potrzebny jest obiekt do zarządzania takimi związkami. Nazwijmy taki obiekt ChangeManager.
  • Odwzorowywanie podmiotów na obserwatory. Najprostszy sposób na śledzenie w podmiocie obserwatorów otrzymujących powiadomienia polega na przechowywaniu referencji do nich bezpośrednio w podmiocie. Jednak to podejście może okazać się zbyt kosztowne, jeśli istnieje wiele podmiotów i nieliczne obserwatory. Jednym z rozwiązań jest zamiana kosztów pamięci na koszty w postaci czasu przetwarzania przez zastosowanie wyszukiwania asocjacyjnego do przechowywania odwzorowań podmiotów na obserwatory. Wtedy podmiot bez obserwatorów nie będzie powodował dodatkowych narzutów związanych z pamięcią. Jednak to podejście zwiększa koszt uzyskania dostępu do obserwatora.
  • Obserwowanie więcej niż jednego podmiotu. W niektórych sytuacjach uzasadnione jest uzależnienie obserwatora od więcej niż jednego podmiotu. Na przykład arkusz kalkulacyjny może zależeć od kilku źródeł danych.
  • Wiszące referencje do usuniętych podmiotów. Usunięcie podmiotu nie powinno prowadzić do powstawania wiszących referencji w jego obserwatorach.
28
Q

Obserwator - Powiązane wzorce

A
  • Mediator - z uwagi na kapsułkowanie złożonej semantyki aktualizacji klasa ChangeManager działa jak mediator między podmiotami i obserwatorami.
  • Singleton - do utworzenia klasy ChangeManager można zastosować wzorzec Singleton, aby jej egzemplarz był niepowtarzalny i globalnie dostępny
29
Q

Metoda szablonowa - nazwy

A

ang. template method

30
Q

Metoda szablonowa - typ

A

klasowy, czynnościowy

31
Q

Metoda szablonowa - Przeznaczenie

A

Określa szkielet algorytmu i pozostawia doprecyzowanie niektórych jego kroków podklasom. Umożliwia modyfikację niektórych etapów algorytmu w podklasach bez zmiany jego struktury.

Zaletą stosowania tego wzorca projektowego jest możliwość zdefiniowania algorytmu, którego wybrane części mogą być w dowolny sposób modyfikowane. Kod nie jest duplikowany, jest przejrzysty, a dodawanie nowych wersji algorytmu jest prostsze i szybsze.

32
Q

Metoda szablonowa - Uzasadnienie

A

Zastanówmy się nad platformą do tworzenia aplikacji udostępniającą klasy Application i Document. Klasa Application odpowiada za otwieranie istniejących dokumentów zapisanych w formacie zewnętrznym, na przykład w pliku. Obiekt Document reprezentuje informacje z dokumentu po ich wczytaniu z pliku. W aplikacjach budowanych za pomocą wspomnianej platformy można utworzyć podklasy klas Application i Document dostosowane do specyficznych potrzeb. Na przykład w aplikacji do rysowania zdefiniowane zostaną podklasy DrawApplication i DrawDocument, a w aplikacji do przetwarzania arkuszy kalkulacyjnych — podklasy SpreadsheetApplication i SpreadsheetDocument.

33
Q

Metoda szablonowa - Warunki stosowania

A
  • Do jednorazowego implementowania niezmiennych części algorytmu i umożliwienia implementowania zmieniających się zachowań w podklasach.
  • Kiedy zachowanie wspólne dla podklas należy wyodrębnić i umieścić w jednej klasie, aby uniknąć powielania kodu.
  • Do kontrolowania rozszerzania podklas. Można zdefiniować metodę szablonową wywołującą w odpowiednich miejscach operacje stanowiące „punkty zaczepienia”, co umożliwia rozszerzanie podklas tylko w tych punktach.
34
Q

Metoda szablonowa - Elementy i współdziałanie

A

• AbstractClass - określa abstrakcyjne operacje proste definiowane w podklasach konkretnych w celu zaimplementowania etapów algorytmu;
- obejmuje implementację metody szablonowej definiującej szkielet algorytmu; metoda szablonowa wywołuje operacje proste, a także operacje zdefiniowane w klasie AbstractClass lub w innych klasach.

  • ConcreteClass - obejmuje implementację operacji prostych realizujących specyficzne dla podklasy etapy algorytmu.
  • Obiekt ConcreteClass polega na obiekcie AbstractClass w zakresie implementacji niezmiennych kroków algorytmu
35
Q

Metoda szablonowa - Konsekwencje

A
  • To podstawowa technika powtórnego wykorzystania kodu. Są szczególnie istotne w bibliotekach klas, ponieważ stanowią narzędzie do wyodrębniania wspólnego zachowania w klasach biblioteki.
  • Metody szablonowe prowadzą do odwrócenia struktury sterowania. Wynika to z tego, że klasa nadrzędna wywołuje operacje podklasy, a nie na odwrót.
  • Ważne jest, aby w metodzie szablonowej określić, które operacje to „punkty zaczepienia” (można je przesłonić), a które są operacjami abstrakcyjnymi (trzeba je przesłonić). Aby skutecznie powtórnie wykorzystać klasę abstrakcyjną, autor podklasy musi zrozumieć, które operacje zaprojektowano w celu ich przesłonięcia.
36
Q

Metoda szablonowa - Implementacja

A
  • Minimalizowanie liczby operacji prostych. Ważnym celem w czasie projektowania metod szablonowych jest zminimalizowanie liczby operacji prostych, które trzeba przesłonić w podklasie w celu utworzenia ciała algorytmu.
  • Konwencje nazewnicze. Można wyróżnić przeznaczone do przesłonięcia operacje przez dodanie przedrostka do ich nazw. Na przykład „Do”- DoCreateDocument, DoRead itd.
37
Q

Metoda szablonowa - Powiązane wzorce

A
  • Metoda wytwórcza - jest często wywoływana przez metody szablonowe.
  • Strategia - w metodach szablonowych wykorzystywane jest dziedziczenie do modyfikowania fragmentów algorytmu. W przypadku strategii za pomocą delegowania zmieniany jest cały algorytm.
38
Q

Strategia - nazwy

A

ang. strategy

pol. polityka
ang. policy

39
Q

Strategia - typ

A

obiektowy, czynnościowy

40
Q

Strategia - Przeznaczenie

A

Wzorzec Strategia definiuje rodzinę algorytmów, pakuje je jako osobne klasy i powoduje, że są one w pełni wymienne.

Zastosowanie tego wzorca pozwala na to, aby zmiany w implementacji algorytmów przetwarzania były całkowicie niezależne od strony klienta, który z nich korzysta

41
Q

Strategia - Uzasadnienie

A

• Istnieje wiele algorytmów podziału strumienia tekstu na wiersze. Trwałe wbudowanie wszystkich takich algorytmów w potrzebujące ich klasy nie jest pożądane.

42
Q

Strategia - Warunki stosowania

A
  • Kiedy wiele powiązanych klas różni się tylko zachowaniem. Strategie umożliwiają skonfigurowanie klasy za pomocą jednego z wielu zachowań.
  • Jeśli potrzebne są różne wersje algorytmu. Można na przykład zdefiniować algorytmy związane z różnymi korzyściami i kosztami z zakresu pamięci oraz czasu przetwarzania.
  • Jeżeli algorytm korzysta z danych, o których klienty nie powinny wiedzieć. Wzorzec Strategia pozwala uniknąć ujawniania złożonych, specyficznych dla algorytmu struktur danych.
  • Gdy klasa definiuje wiele zachowań, a te w operacjach pojawiają się w formie złożonych instrukcji warunkowych. Zamiast tworzyć wiele takich instrukcji, należy przenieść powiązane gałęzie do odrębnych klas Strategy.
43
Q

Strategia - Elementy i współdziałanie

A

• Strategy - obejmuje deklarację wspólnego interfejsu wszystkich obsługiwanych algorytmów. Klasa Context może korzystać z tego interfejsu do wywoływania algorytmów zdefiniowanych w klasach ConcreteStrategy.

• ConcreteStrategy
- obejmuje implementację algorytmu zgodną z interfejsem klasy Strategy.

• Context - jest konfigurowana za pomocą obiektu ConcreteStrategy;

  • przechowuje referencję do obiektu Strategy;
  • może definiować interfejs dający obiektom Strategy dostęp do danych obiektu Context.
  • Klasy Strategy i Context współdziałają w celu realizacji wybranego algorytmu. Obiekt Context może w momencie wywołania algorytmu przekazać do obiektu Strategy wszystkie dane potrzebne w tym algorytmie.
  • Inne rozwiązanie to przekazywanie przez obiekt Context samego siebie jako argumentu do operacji klasy Strategy. Umożliwia to obiektom Strategy zwrotne wywołanie obiektu Context w razie potrzeby.
  • Obiekt Context przekazuje żądania od jego klientów do obiektu Strategy. Klienty zwykle tworzą obiekt ConcreteStrategy i przekazują go do obiektu Context. Następnie klienty mogą kontaktować się tylko z obiektem Context. Często klienty mogą wybierać klasy z całej rodziny klas ContextStrategy.
44
Q

Strategia - Konsekwencje

A
  • Powoduje powstawanie rodzin powiązanych algorytmów.
  • Zapewnia alternatywę dla tworzenia podklas.
  • Strategie pozwalają wyeliminować instrukcje warunkowe. Wzorzec Strategia można zastosować zamiast instrukcji warunkowych do wyboru pożądanego zachowania. Kiedy różne zachowania są umieszczone w jednej klasie, trudno jest uniknąć korzystania z instrukcji warunkowych do ustalenia właściwego z nich.
45
Q

Strategia - Implementacja

A
  • Definiowanie interfejsów klas Strategy i Context. Interfejsy klas Strategy i Context muszą zapewniać obiektom ConcreteStrategy wydajny dostęp do wszelkich potrzebnych im danych z obiektu Context i na odwrót.
  • Opcjonalne stosowanie obiektów Strategy. Klasę Context można uprościć, jeśli może ona działać bez obiektu Strategy. Obiekt Context powinien wtedy sprawdzać, czy obiekt Strategy jest dostępny, a dopiero potem z niego korzystać. Jeśli obiekt Strategy istnieje, obiekt Context będzie stosował go w standardowy sposób. Jeżeli strategia jest niedostępna, obiekt Context wykorzysta standardowe zachowanie.
46
Q

Strategia - Powiązane wzorce

A

• Pyłek - obiekty Strategy często warto tworzyć jako pyłki.

47
Q

Stan - nazwa

A

ang. state

pol. obiekty stanów
ang. objects of states

48
Q

Stan - typ

A

obiektowy, czynnościowy

49
Q

Stan - Przeznaczenie

A

Umożliwia obiektowi modyfikację zachowania w wyniku zmiany wewnętrznego stanu. Wygląda to tak, jakby obiekt zmienił klasę.

50
Q

Stan - Uzasadnienie

A

Zastanówmy się nad klasą TCPConnection reprezentującą połączenie sieciowe. Obiekt tej klasy
przyjmuje kilka stanów — Established (po nawiązaniu), Listening (oczekiwanie), Closed (po zamknięciu). Kiedy obiekt TCPConnection odbiera żądania od innych obiektów, reaguje w różny sposób w zależności od stanu. Na przykład efekt żądania Open jest oparty na tym, czy połączenie znajduje się w stanie Close czy Established. Wzorzec Stan opisuje, jak obiekt TCPConnection może zmieniać zachowania w zależności od stanu.

51
Q

Stan - Warunki stosowania

A

• Zachowanie obiektu zależy od jego stanu, a obiekt musi na podstawie stanu zmieniać działanie w czasie wykonywania programu.

52
Q

Stan - Elementy i współdziałanie

A

• Context:
- definiuje interfejs udostępniany klientom;
- przechowuje egzemplarz podklasy klasy ConcreteState definiujący bieżący stan.
• State:
- definiuje interfejs do kapsułkowania zachowania związanego z określonym stanem obiektu
Context.
• Podklasy klasy ConcreteState:
- każda podklasa obejmuje implementację zachowania powiązaną ze stanem obiektu Context.

Obiekt Context deleguje żądania specyficzne dla stanu do bieżącego obiektu ConcreteState. Obiekt Context może przekazać sam siebie jako argument do obiektu State obsługującego żądanie. Umożliwia to obiektowi State uzyskanie w razie potrzeby dostępu do kontekstu. Obiekt Context to podstawowy interfejs dla klientów. Klienty mogą konfigurować interfejs tego obiektu za pomocą obiektów State. Po skonfigurowaniu obiektu Context klienty nie muszą bezpośrednio korzystać z obiektów State. Klasa Context lub podklasy klasy ConcreteState mogą określać kolejność i warunki zmiany stanów.

53
Q

Stan - Konsekwencje

A

• Pozwala umieścić w jednym miejscu zachowanie specyficzne dla stanu i rozdzielić zachowania
powiązane z różnymi stanami.
• Powoduje, że zmiany stanu są jawne. Kiedy stan obiektu jest zdefiniowany całkowicie w kategoriach wewnętrznych wartości jego danych, zmiany stanu nie mają jawnej reprezentacji, ale wynikają z przypisania wartości do określonych zmiennych. Wprowadzenie odrębnych obiektów dla różnych stanów zapewnia większą jawność zmian stanu.
• Stan obiektów można współużytkować (pyłek).

54
Q

Stan - Implementacja

A

• Który z elementów ma definiować zmiany stanu? Wzorzec Stan nie określa, które elementy mają definiować kryteria zmiany stanu. Jeśli te kryteria są stałe, można je w całości zapisać w klasie Context. Jednak zwykle elastyczniejsze i bardziej odpowiednie jest umożliwienie podklasom klasy State samodzielnego określania następnego stanu oraz momentu jego zmiany
• Podejście oparte na tablicach. Dla każdego stanu tablica odwzorowuje wszystkie możliwe dane wejściowe prowadzące do następnego stanu. Prowadzi do przekształcenia kodu z instrukcjami
warunkowymi w kod oparty na przeszukiwaniu tablicy.
• Tworzenie i usuwanie obiektów State. W czasie implementowania warto zastanowić się nad typowym dylematem:
• - czy tworzyć obiekty State tylko wtedy, kiedy są potrzebne, a następnie je usuwać
• - czy tworzyć je na początku działania programu i nigdy ich nie likwidować.

55
Q

Stan - Powiązane wzorce

A
  • Wzorzec Pyłek określa, kiedy i jak można współużytkować obiekty State.
  • Obiekty State często są singletonami.