1. most (bridge)
1.1. Oddziela abstrakcję od jej implementacji, dzięki czemu można modyfikować te dwa elementy niezależnie od siebie
1.1.1. najprostsza postać to połączenie dziedzieczenia i kompozycji
1.1.2. pozwala realizować funkcje interfejsu niezależnie od języka programowania
1.1.3. oddziela interfejs od implementacji
1.1.4. przykład
1.1.4.1. aplikacja do rysowania
1.1.4.1.1. klasa abstrakcyjna dostarcza informacji o figurach, a interfejsy dostarczają informacji jak rysować te figury
1.1.5. może zmieniać
1.1.5.1. implementacja obiektu
1.2. implementacja
1.2.1. C++
1.2.2. java
2. kompozyt (composite)
2.1. Składa obiekty w struktury drzewiaste odzwierciedlające hierarchię typu część-całość. Wzorzec ten umożliwia klientom traktowanie poszczególnych obiektów i ich założeń w taki sam sposób
2.1.1. może zmieniać
2.1.1.1. struktura i skład obiektu
2.1.2. Zarówno klasa agregująca jak i klasa reprezentująca pojedynczy obiekt mają wspólny interfejs. Dlatego można je traktować tak samo. Klasa agregująca może agregować pojedyncze obiekty, jak również inne klasy agregujące
2.1.3. elementy
2.1.3.1. Component
2.1.3.1.1. klasa abstrakcyjna reprezentująca pojedyńczy komponent jak i wiele komponentów Leaf
2.1.3.2. Leaf
2.1.3.2.1. typ prosty , nie posiada potomków
2.1.3.3. Composite (lub Compund)
2.1.3.3.1. przechowuje obiekty proste Leaf
2.1.3.3.2. implementuje zachowanie elementów które zawiera
2.1.4. zapewnia jednolitą obsługę pojedynczych i złożonych struktur
2.1.5. organizuje obiekty w struktury drzewiaste
2.2. implementacja
2.2.1. c++
2.2.2. java
3. dekorator (decorator)
3.1. Dynamicznie dołącza dodatkowe obowiązki do obiektu. Wzorzec ten udostępnia alternatywny elastyczny sposób tworzenia podklas o wzbogaconych funkcjach.
3.1.1. może zmieniać
3.1.1.1. zadanie obiektu (bez tworzenia podklas)
3.1.2. budowa
3.1.2.1. przekazuje się w konstruktorze klasy dekorującej obiekt, który póżniej w tej klasie jest wywoływany i wzbogacany o nowe funkcje
3.1.3. przykład
3.1.3.1. Potrzebuję zmodyfikować funkcjonalność istniejącej metody dodając pewien zbiór operacji do obecnej funkcjonalności.
3.1.3.1.1. możemu za pomocą kompozycji lub dziedziczenia
3.1.4. alternatywa dziedziczenia
3.1.4.1. ten sam interfejs cały czas
3.2. implementacja
3.2.1. java
3.2.2. php
4. fasada
4.1. Stosowany w celu uproszczenia dostępu do złożonego systemu (interefejsów), udostępniając coś bardziej user-friendly
4.1.1. elementy
4.1.1.1. złożony system
4.1.1.2. fasad
4.1.1.2.1. z najczęstszymi metodami
4.1.1.3. klient
4.1.1.3.1. kod zainteresowany wykorzystaniem złożonego systemu
4.1.2. pozwala na stworzenie alternatywnego interfejsu do obiektu lub grupy obiektów
4.1.3. podobna jak proxy, tylko bezpośrednie odwołania do obiektów
4.1.4. podsystemy
4.1.4.1. speracja klienta od nich
4.1.4.2. zmiany w podsystemach niewidoczne dla klienta
4.2. implementacja
4.2.1. c#
5. adapter (wrapper)
5.1. Przekształca interfejs klasy na inny, oczekiwany przez klienta. Adapter umożliwia współdziałanie klasom, które z uwagi na niezgodne interfejsy standardowo nie mogą współpracować ze sobą.
5.1.1. rodzaje
5.1.1.1. klasowy
5.1.1.2. obiektowy
5.1.1.3. implementacja
5.1.2. elementy
5.1.2.1. Adapter
5.1.2.2. Adapte
5.1.2.3. Target
5.1.3. inna nazwa wrapper
5.1.4. pozwala na adaptacaję różnych interfejsów różnych obiektów
5.2. implementacja
5.2.1. php
5.2.2. C++
5.2.3. java
6. private class data
7. pyłek (flyweight)
7.1. Wykorzystuje współdzielenie do wydajnej obsługi dużej liczby małych obiektów
7.1.1. może zmieniać
7.1.1.1. koszty przechowywania obiektów
7.1.2. zastosowanie
7.1.2.1. tam gdzie klasa ma dużo egzemplarzy
7.1.3. cel
7.1.3.1. zmniejszenie wykorzystania pamięci poprzez efektywną obsługę małych obiektów za pomocą współdzielenia
7.2. implementacja
7.2.1. c#
8. pełnomocnik (proxy)
8.1. Udostępnia zastępnik lub reprezentanta innego obiektu w celu kontrolowania dostępu do niego
8.1.1. może zmieniać
8.1.1.1. sposób dostępu do obiektu i jego lokalizację
8.1.2. rodzaje
8.1.2.1. wirtualny
8.1.2.1.1. odsunięcie w czasie utworzenia elementu docelowego
8.1.2.2. ochraniający
8.1.2.2.1. kontrola obiektu do obiektu docelowego
8.1.2.3. zdalny
8.1.2.3.1. odwołanie się do obiektu zdalnego
8.1.2.4. sprytne odwołanie
8.1.3. elementy
8.1.3.1. Subject
8.1.3.1.1. interfejs
8.1.3.2. RealSubject
8.1.3.2.1. obiekt docelowy
8.1.3.3. Proxy
8.1.3.3.1. referncja do RealSubject
8.1.3.3.2. kontroluje do niego dostęp
8.1.4. cel
8.1.4.1. z punktu widzenia klienta jest przeźroczysty i nie ma wpływu na interakcje z nim
8.2. implementacja
8.2.1. c#