Iterator
Iterator to behawioralny wzorzec projektowy. Reprezentuje obiekt, który umożliwia sekwencyjny dostęp do elementów obiektu zagregowanego bez używania opisów każdego z zagregowanych obiektów.
Na przykład elementy takie jak drzewo, połączona lista, tablica skrótów i tablica mogą być przeglądane (i modyfikowane) za pomocą obiektu Iterator.
Iteracja po elementach jest wykonywana przez obiekt iteratora, a nie przez samą kolekcję. Upraszcza to interfejs i implementację kolekcji oraz promuje bardziej logiczne oddzielenie problemów.
Cechą w pełni zaimplementowanego iteratora jest to, że kod korzystający z iteratora może nie wiedzieć nic o typie iterowanego agregatu.
To podejście jest stosowane bardzo często. Na przykład wysyłasz zapytanie SQL do bazy danych, a w odpowiedzi zwraca ona iterator (w języku SQL jest to zwykle nazywane kursorem). Za pomocą wynikowego iteratora możesz pobierać wiersze z odpowiedzi SQL jeden po drugim.
Komenda
Polecenie to behawioralny wzorzec projektowy używany w programowaniu obiektowym, który reprezentuje akcję. Obiekt polecenia zawiera samą akcję i jej parametry.
Aby wywołać metodę, zwykle potrzebujesz:
- odniesienie do obiektu
- nazwa metody (odniesienie do metody)
- wartości parametrów metody
- odniesienie do kontekstu, który zawiera użyte obiekty
Wszystkie te dane należy spakować w jeden obiekt - Polecenie ( polecenie ).
Ale to nie wszystko: ktoś przecież musi wykonać polecenie. Zatem ten wzorzec zawiera jeszcze cztery jednostki: polecenia ( polecenie ), odbiornik polecenia ( receiver ), wywołujący polecenie ( invoker ) i klienta ( client ).
ObiektKomendawie o odbiorniku i wywołuje metodę odbiornika. Wartości parametrów odbiornika są przechowywane w poleceniu. Dzwoniący (wywołujący) wie, jak wykonać polecenie i ewentualnie śledzi wykonane polecenia. Dzwoniący (wywołujący) nie wie nic o konkretnym poleceniu, wie tylko o interfejsie.
Oba obiekty (obiekt wywołujący i kilka obiektów poleceń) należą do obiektu klienta. Klient decyduje, które polecenia wykonać i kiedy. Aby wykonać polecenie, przekazuje obiekt polecenia wywołującemu (wywołującemu).
Korzystanie z obiektów poleceń ułatwia tworzenie współdzielonych komponentów, które trzeba delegować lub wykonywać wywołania metod w dowolnym momencie, bez konieczności znajomości metod klasowych lub parametrów metod.
Użycie obiektu wywołującego (invoker) pozwala na prowadzenie rejestru wykonanych poleceń bez konieczności wiedzy klienta o tym modelu rozliczania (takie rozliczanie może być przydatne np. do implementacji poleceń cofania i ponawiania).
Na przykład piszesz program, który umożliwia wykonywanie różnych zadań zgodnie z harmonogramem. Twój program z jednej strony śledzi zadania i zarządza ich uruchomieniem, z drugiej strony może mieć kilka executorów, z których każdy może wykonywać polecenia własnego typu. Na przykład wysyłanie SMS-ów, wysyłanie listów, wysyłanie wiadomości do Telegramu itp.
Obserwator
Obserwator to behawioralny wzorzec projektowy. Implementuje mechanizm klasy, który pozwala obiektowi tej klasy otrzymywać powiadomienia o zmianach stanu innych obiektów i tym samym je obserwować.
Klasy, które subskrybują inne klasy, nazywane są podmiotami , a klasy subskrybujące nazywane są obserwatorami .
Podczas implementacji wzorca Observer powszechnie używane są następujące klasy:
- Observable – interfejs definiujący metody dodawania, usuwania i powiadamiania obserwatorów;
- Obserwator – interfejs, za pośrednictwem którego obserwator otrzymuje powiadomienie;
- ConcreteObservable to konkretna klasa, która implementuje interfejs Observable ;
- ConcreteObserver to konkretna klasa, która implementuje interfejs Observer .
Wzorzec Obserwatora jest używany, gdy system:
- istnieje co najmniej jeden obiekt, który wysyła komunikaty;
- istnieje co najmniej jeden odbiorca wiadomości, a ich liczba i skład mogą ulec zmianie w trakcie działania aplikacji;
- unika silnego sprzężenia oddziałujących klas.
Wzorzec ten jest często wykorzystywany w sytuacjach, w których nadawca wiadomości nie jest zainteresowany tym, co odbiorca robi z przekazaną mu informacją.
Gość
Gość to behawioralny wzorzec projektowy opisujący operację wykonywaną na obiektach innych klas. W przypadku zmiany gościa nie ma potrzeby zmiany obsługiwanych klas.
Szablon demonstruje klasyczną technikę odzyskiwania utraconych informacji o typie bez uciekania się do podwójnego wysyłania w dół.
Musisz wykonać kilka rozłączonych operacji na wielu obiektach, ale musisz unikać zanieczyszczania ich kodu. I nie ma sposobu ani chęci sprawdzania typu każdego węzła i rzutowania wskaźnika na właściwy typ przed wykonaniem żądanej operacji.
Z szablonu należy skorzystać, jeżeli:
- istnieją różne obiekty różnych klas z różnymi interfejsami, ale trzeba na nich wykonywać operacje zależne od konkretnych klas;
- na konstrukcji konieczne jest wykonanie różnych operacji komplikujących konstrukcję;
- często dodawane są nowe operacje na strukturze.
mediator
Mediator to behawioralny wzorzec projektowy, który umożliwia interakcję wielu obiektów przy jednoczesnym zachowaniu luźnego powiązania i unikaniu potrzeby jawnego odnoszenia się obiektów do siebie.
Wzorzec Mediator pozwala zapewnić interakcję wielu obiektów, jednocześnie tworząc luźne powiązania i eliminując potrzebę jawnego odnoszenia się obiektów do siebie.
Mediator definiuje interfejs do wymiany informacji z obiektamiWspółpracownicy, Poszczególny mediator koordynuje działania obiektówWspółpracownicy.
Każda klasa Koledzy wie o swoim obiekcieMediator, wszyscy Koledzy wymieniają informacje tylko z pośrednikiem, pod jego nieobecność musieliby wymieniać informacje bezpośrednio.
Współpracownicywysyłać żądania do Sprzedawcy/span> i otrzymywać od niego żądania. Mediator wdraża zachowanie oparte na współpracy, przekazując każdą prośbę do jednego lub więcejWspółpracownicy.