Design Patterns Flashcards

1
Q

Co to jest wzorzec projektowy?

A

Wzorce projektowe to rozwiązania na poziomie projektu dla powtarzających się problemów, z którymi my, inżynierowie oprogramowania, często spotykamy się. To nie kod - powtarzam, ❌CODE. To jest jak opis, jak poradzić sobie z tymi problemami i zaprojektować rozwiązanie.

Korzystanie z tych wzorców jest uważane za dobrą praktykę, ponieważ projekt rozwiązania jest dość wypróbowany i przetestowany, co skutkuje wyższą czytelnością końcowego kodu. Wzorce projektowe są dość często tworzone i używane przez języki OOP, takie jak Java, w której zostanie napisana większość przykładów od tego momentu.

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

Rodzaje wzorców projektowych

A

Obecnie odkryto około 26 wzorów (nie sądzę, że uda mi się je wszystkie odtworzyć…).

Te 26 można podzielić na 3 typy:

  1. Kreacyjne: Wzorce te są przeznaczone do tworzenia klas. Mogą to być zarówno wzorce tworzenia klas, jak i wzorce obiektowo-rekreacyjne.
  2. Strukturalne: Wzorce te są projektowane z uwzględnieniem struktury i składu klasy. Głównym celem większości tych wzorców jest zwiększenie funkcjonalności danej klasy (klas), bez wprowadzania większych zmian w jej składzie.
  3. Behawioralne: Wzorce te są projektowane w zależności od tego, jak jedna klasa komunikuje się z innymi.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Typ 1: Kreacyjny - Wzorzec projektowy Singleton

A

Wzorzec Singleton jest wzorcem kreacyjnym, którego celem jest utworzenie tylko jednej instancji klasy i zapewnienie tylko jednego globalnego punktu dostępu do tego obiektu. Jednym z powszechnie używanych przykładów takiej klasy w Javie jest Calendar, gdzie nie można utworzyć instancji tej klasy. Klasa ta używa również własnej metody getInstance() do uzyskania obiektu, który ma być użyty.

Klasa używająca wzorca projektowego singleton będzie zawierała,
schemat klasy singleton
Schemat klasy singletonowej

Prywatną zmienną statyczną, przechowującą jedyną instancję klasy.
Prywatny konstruktor, aby nie można było jej zainicjować nigdzie indziej.
Publiczną metodę statyczną zwracającą pojedynczą instancję klasy.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Chętny bóbr

A

Tego typu instancja występuje podczas ładowania klasy, ponieważ instancja zmiennej występuje poza każdą metodą. Stanowi to poważną wadę, jeśli klasa ta nie jest w ogóle używana przez aplikację kliencką. Jeżeli klasa ta nie jest używana, można skorzystać z metody Lazy Instantiation.

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

Lazy Days

A

Zmienna statyczna jest początkowo deklarowana jako null i jest instancjonowana w metodzie getInstance() tylko wtedy, gdy - i tylko wtedy - zmienna instancji pozostaje null w czasie sprawdzania.

Rozwiązuje to jeden problem, ale inny nadal istnieje. Co się stanie, jeśli dwóch różnych klientów uzyska dostęp do klasy Singleton w tym samym czasie, z dokładnością do jednej milisekundy? Cóż, w tym samym czasie sprawdzą, czy instancja jest null, i stwierdzą, że tak, a więc utworzą dwie instancje klasy dla każdego żądania dwóch klientów. Aby to naprawić, należy zaimplementować bezpieczną instancję wątku.

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

Fabryka Abstrakcyjna

A

Umożliwia tworzenie rodzin powiązanych obiektów bez określania ich konkretnych klas.

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

Adapter

A

Umożliwia współpracę obiektów o niekompatybilnych interfejsach.

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

Budowniczy

A

Pozwala na konstruowanie złożonych obiektów krok po kroku. Wzorzec pozwala na tworzenie różnych typów i reprezentacji obiektu przy użyciu tego samego kodu konstrukcyjnego.

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

Most

A

Pozwala podzielić dużą klasę lub zestaw ściśle powiązanych klas na dwie oddzielne hierarchie - abstrakcji i implementacji - które mogą być rozwijane niezależnie od siebie.

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

Metoda fabryczna

A

Udostępnia interfejs do tworzenia obiektów w nadklasie, ale pozwala podklasom zmieniać typ obiektów, które będą tworzone.

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

Kompozyt

A

Umożliwia kompilowanie obiektów w struktury drzewiaste, a następnie pracę z tymi strukturami tak, jakby były pojedynczymi obiektami.

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

Prototyp

A

Umożliwia kopiowanie istniejących obiektów bez uzależniania kodu od ich klas.

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

Dekorator

A

Umożliwia dołączanie nowych zachowań do obiektów poprzez umieszczanie ich wewnątrz specjalnych obiektów opakowujących, które zawierają te zachowania.

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

Singleton

A

Umożliwia zapewnienie, że klasa ma tylko jedną instancję, a jednocześnie zapewnia globalny punkt dostępu do tej instancji.

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

Fasada

A

Zapewnia uproszczony interfejs do biblioteki, frameworka lub innego złożonego zestawu klas.

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

Waga musza

A

Umożliwia zmieszczenie większej liczby obiektów w dostępnej ilości pamięci RAM poprzez współdzielenie wspólnych części stanu pomiędzy wieloma obiektami, zamiast przechowywania wszystkich danych w każdym z nich.

17
Q

Proxy

A

Umożliwia zapewnienie zastępstwa lub zastępczego miejsca dla innego obiektu. Funkcja proxy kontroluje dostęp do oryginalnego obiektu, umożliwiając wykonywanie działań przed lub po dotarciu żądania do oryginalnego obiektu.

18
Q

Łańcuch Odpowiedzialności

A

Umożliwia przekazywanie żądań wzdłuż łańcucha handlerów. Po otrzymaniu żądania każdy z handlerów decyduje, czy przetworzyć żądanie, czy przekazać je do następnego w łańcuchu.

19
Q

Polecenie

A

Przekształca żądanie w samodzielny obiekt, który zawiera wszystkie informacje o żądaniu. Ta transformacja pozwala przekazywać żądania jako argumenty metod, opóźniać lub kolejkować wykonanie żądania oraz obsługiwać operacje, których nie można cofnąć.

20
Q

Iterator

A

Umożliwia przeglądanie elementów kolekcji bez ujawniania jej podstawowej reprezentacji (listy, stosu, drzewa itp.).

21
Q

Mediator

A

Pozwala ograniczyć chaotyczne zależności między obiektami. Wzorzec ten ogranicza bezpośrednią komunikację między obiektami i zmusza je do współpracy wyłącznie za pośrednictwem obiektu pośredniczącego.

22
Q

Memento

A

Umożliwia zapisywanie i przywracanie poprzedniego stanu obiektu bez ujawniania szczegółów jego implementacji.

23
Q

Obserwator

A

Umożliwia zdefiniowanie mechanizmu subskrypcji w celu powiadamiania wielu obiektów o wszelkich zdarzeniach dotyczących obserwowanego przez nie obiektu.

24
Q

Państwo

A

Umożliwia zmianę zachowania obiektu, gdy zmienia się jego stan wewnętrzny. Wygląda to tak, jakby obiekt zmienił swoją klasę.

25
Q

Strategia

A

Umożliwia zdefiniowanie rodziny algorytmów, umieszczenie każdego z nich w osobnej klasie i uczynienie ich obiektów wymiennymi.

26
Q

Metoda szablonu

A

Definiuje szkielet algorytmu w nadklasie, ale pozwala podklasom nadpisywać poszczególne kroki algorytmu bez zmiany jego struktury.

27
Q

Odwiedzający

A

Umożliwia oddzielenie algorytmów od obiektów, na których działają.