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”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
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 obserwowanym wprowadzamy interfejs Obserwator, który może być realizowany przez dowolną klasę wymagającą powiadomień o zmianie stanu obserwowanego.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Singleton

A
  • Wzorzec konstrukcyjny, którego celem jest ograniczenie 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Dekorator

A
  • Wzorzec strukturalny, często traktowany jako “alternatywa dla dziedziczenia”. Pozwala na dynamiczne 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Fabryka Abstrakcyjna

A
  • Wzorzec kreacyjny, ideowo mocno związany z Metodą Wytwórczą. Koncentrujemy się tu jednak na tworzeniu 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Metoda Wytwórcza (Factory Method)

A
  • Wzorzec konstrukcyjny - dotyczący tworzenia 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Prototyp

A
  • Wzorzec konstrukcyjny, który tworzy nowe 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 temu wystarczy zainicjalizować tylko jeden obiekt. Kolejne będą już inicjalizowane podczas klonowania.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Adapter

A
  • Wzorzec strukturalny, który umoż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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Strategia

A
  • Wzorzec operacyjny, który definiuje rodzinę wymiennych algorytmów i kapsułkuje je w postaci klas. Umożliwia wymienne 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).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
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 jej inne 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
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)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Budowniczy

A
  • Wzorzec konstrukcyjny, stosowany tam, gdzie proces 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 nim kolejne etapy tworzenia obiektu. Następnie tworzymy wielu różnych budowniczych, którzy wykonują te etapy 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly