WZORCE PROJEKTOWE Flashcards
1
Q
Fasada
A
Wzorzec strukturalny
, celem jest "ukrywanie" złożoności systemu
przed klientem
Chowamy skomplikowany system (zwykle złożony z wielu klas) za pojedynczą klasą (fasadą) o prostym interfejsie. Klient
widzi kilka prostych metod i nie musi się martwić o szczegóły implementacji
, która jest “pod spodem”.
2
Q
Obserwator
A
- Wzorzec operacyjny, który
powiadamia obiekty
(obserwatorzy)o zmianie stanu innego obiektu
(obserwowanego).Rola obserwatorów jest “bierna” - nie odpytują aktywnie obiektu obserwowanego. - Ważne jest
zastosowanie polimorfizmu
-Zamiast łączyć bezpośrednio
obserwatora z obiektem obserwowanymwprowadzamy interfejs Obserwator
, który może być realizowany przez dowolną klasę wymagającą powiadomień o zmianie stanu obserwowanego.
3
Q
Singleton
A
-
Wzorzec konstrukcyjny
, którego celem jestograniczenie możliwości tworzenia obiektów danej klasy do jednej instancji
oraz zapewnienie globalnego dostępu do stworzonego obiektu. - Sposoby:
1.Prywatny konstruktor
- prywatnych elementów nie da się używać poza klasą
2.Publiczna, statyczna metoda zwracająca wskaźnik
albo referencję na instancję obiektu - Uwaga: singleton jest często
uznawany za antywzorzec
4
Q
Dekorator
A
-
Wzorzec strukturalny
, często traktowany jako “alternatywa dla dziedziczenia”. Pozwala nadynamiczne dodawanie nowych zachowań
do istniejących obiektów. - Dekorator
przechowuje w sobie instancję klasy
Komponent (zwykle dostaje ją w konstruktorze). - Każde
wywołanie metody Dekoratora wywołują odpowiednie metody Komponentu
. Oprócz tego metody Dekoratora mogą robić “coś jeszcze”, dodając do oryginalnych metod nową funkcjonalność. -
Klient pracuje z interfejsem
- nie widzi różnicy między oryginalnym Komponentem, a Dekoratorem.
5
Q
Fabryka Abstrakcyjna
A
-
Wzorzec kreacyjny
, ideowo mocno związany z Metodą Wytwórczą. Koncentrujemy się tu jednak natworzeniu całych rodzin spokrewnionych produktów
(np. PC, Monitor, Klawa…). A nie na tworzeniu pojedynczego rodzaju produktu jak w Metodzie Wytwórczej (np. Piwo). - Interfejs fabryki
zawiera wiele metod wytwórczych – po jednej dla każdego rodzaju produktu
.
6
Q
Metoda Wytwórcza (Factory Method)
A
-
Wzorzec konstrukcyjny
- dotyczącytworzenia obiektów
. - Mamy
zbiór klas realizujących wspólny interfejs "produkty"
. Na przykład różne rodzaje piwa. -
Dla każdego rodzaju produktu mamy "kreator" - klasę wytwarzającą obiekty produktu
. Na przykład różne dystrybutory. -
Wszystkie kreatory realizują wspólny interfejs
, z którego korzysta Klient, żeby mógł korzystać z dowolnego kreatora
7
Q
Prototyp
A
-
Wzorzec konstrukcyjny
, który tworzynowe obiekty poprzez "klonowanie"
obiektu już istniejącego. - Klient nie musi nic tworzyć.
Wystarczy mu pojedynczy prototyp
, który będzie można powielać. - Prototyp z reguły
kopiuje przechowywane dane do nowego obiektu
. Dzięki temuwystarczy zainicjalizować tylko jeden obiekt
. Kolejne będą już inicjalizowane podczas klonowania.
8
Q
Kompozyt
A
-
Wzorzec strukturalny
, który składa obiekty tak, aby klient widziałwiele z nich jako pojedynczy obiekt
. - Wyobraźmy sobie, że mamy interfejs Kształt i realizują go klasy Prostokąt, Kwadrat i Koło.
- Chcielibyśmy pracować ze zbiorami kształtów, dlatego użyjemy
kompozytu - klasę, która jest kontenerem
Kształtów, i realizuje interfejs Kształt. - Wywołując metodę
na kompozycie,
wywołujemy ją na wszystkich agregowanych klasach. - Dla klienta
kompozyt ma ten sam interfejs co pojedynczy
kształt, wiec współpraca z nim to jak praca na pojedynczym obiekcie.
9
Q
Proxy
A
- Wzorzec strukturalny,
tworzy obiekt "zastępujący" pewien inny obiekt lub "pośredniczący" między tym obiektem a klientem.
- Wersja (“wirtualna”) - mamy klasę, której obiekty zajmują dużo pamięci i ich tworzenie jest czasochłonne. Rzadko jednak z nich korzystamy, więc nie warto tego robić z każdym uruchomieniem.
Zadaniem Proxy jest stworzyć oryginalny obiekt dopiero wtedy, kiedy faktycznie pojawi się taka potrzeba.
- Wersja (“ochraniająca”) - do obiektu zastępowanego przekazywane są tylko te wywołania metod, które są “legalne” (np. w obiekcie musi być odpowiednia kolejność wywołań). Czyli
Proxy niejako kontroluje co zostanie przekazane, a co nie
. - Wersja (“zdalna”). Prawdziwy obiekt istnieje np. w ramach procesu uruchomionego na innej maszynie.
Proxy sprawia wrażenie, że obiekt jest dostępny lokalnie, w rzeczywistości komunikując się po sieci z innymi procesami
.
10
Q
Adapter
A
-
Wzorzec strukturalny
, któryumożliwienia współprace dwóch klasom o niekompatybilnych interfejsach
. Adapter przekształca interfejs jednej z klas na interfejs drugiej klasy. - Adapter z reguły
realizuje pożądany interfejs i opakowuje
(przechowuje w sobie)klasę, z której będziemy korzystać
. Wywołania metod z interfejsu są “tłumaczone” na wywołania odpowiednich metod z opakowywanej klasy. - Mamy system skanujący pliki .PDF a chcemy Użyć go na pliku .DOCX wtedy użyjemy adaptera
11
Q
Strategia
A
-
Wzorzec operacyjny
, który definiujerodzinę wymiennych algorytmów i kapsułkuje je w postaci klas
. Umożliwiawymienne stosowanie
każdego z nich w trakcie działania aplikacji. Tworzymy interfejs algorytmu i realizujemy go klasami jego różnych wersji. Klient zależny tylko od interfejsu może przełączać się miedzy algorytmami dzięki jakiejś funkcji set.
- Ważne: możemy dodawać nowe wersje algorytmu do projektu bez konieczności modyfikacji istniejących klas
(Open / Closed Principle)
.
12
Q
Metoda Szablonowa
A
-
Wzorzec czynnościowy, tworzymy abstrakcyjną klasę bazową, zawierającą zarys algorytmu
- jego ogólną, powtarzalną część. Chcemy dodać do niej jejinne wersje lekko się różniące
. - Implementowanie
dwóch klas z tym samym algorytmem
, różniących się drobnym szczegółem,to kiepskie rozwiązanie
(zasada DRY). Metoda szablonowa stanowi rozwiązanie tego problemu.
(Powiedzmy, że mamy alg. sortowania i jeden jest rosnący a drugi malejący)
- Tworzymy dwie klasy pochodne, w których dodajemy brakujący element - jedna klasa implementuje metodę porównaj() tak, aby sortowała rosnąco, a druga malejąco.
- W ten sposób uzyskujemy
dwie wersje algorytmu, bez powtarzania wspólnego kodu
.
13
Q
Stan
A
- Wzorzec operacyjny,
zmiana sposobu zachowania obiektu w zależności od jego **Stanu**
.
(np. tryby pracy pojazdu: ECO, Żółw, Sport, Nimbus2000) - Stany są implementowane w postaci klas realizujących pewien wspólny interfejs.
Klasa, której zachowanie chcemy zmieniać, przechowuje w sobie obiekt stanu
. Oczywiście w trakcie działania programu stan może zostać zmieniony na inny. - Wzorzec ma strukturę bardzo podobną (praktycznie taką samą) jak
Strategia. Różnica
jest przede wszystkim w idei / zastosowaniu -w Strategii mieliśmy wymienne algorytmy służące do tego samego celu
(generalnie robiące to samo na różne sposoby),w Stanie zmieniając stan obiektu zmieniamy jego zachowanie
(obiekt zaczyna robić coś zupełnie innego). - Czasami wskazuje się na inne możliwe różnice, np. implementacje Stanu często dopuszczają sytuację, w której obiekt danego stanu może zarządzić zmianę stanu na inny. W Strategii czegoś takiego się nie robi (strategie są generalnie zmieniane “z zewnątrz” obiektu)
14
Q
Budowniczy
A
-
Wzorzec konstrukcyjny
, stosowany tam, gdzieproces tworzenia i inicjalizacji obiektów jest złożony
(składa się z wielu etapów).
-Daniluk mówi ze Budowniczy składa się z trzech ról: produktu (Product), budowniczego (Builder) i nadzorcy (Director) - Tworzymy
interfejs budowniczego
i piszemy w nimkolejne etapy tworzenia
obiektu. Następnie tworzymywielu różnych budowniczych
, którzy wykonują teetapy na różne sposoby
. -
Nadzorca (Director) dostaje referencję
na konkretnego budowniczego i zleca mu wykonanie wszystkich wymaganych etapów. Kiedy produkt jest ukończony, klient może go odebrać. - Dzięki temu wzorcowi możemy
uniknąć powtarzania się schematu
tworzenia obiektu w wielu klasach.