Wzorce Projektowe

From Training Material
Jump to navigation Jump to search

Template:Design Patterns Links

Nobleprog.svg

Design Patterns - Wzorce projektowe

title
Design Patterns
author
Leszek Albrzykowski (NobleProg Ltd)

Kody źródłowe dla omawianych wzorców: http://svn.nobleprog.com/training/php/Patterns/

Podstawy ⌘

Próba zdefiniowania ⌘

Dlaczego patrząc na jakiś budynek jesteśmy w stanie określić wiek i styl architektoniczny w jakim powstał?

Charakterystyka ⌘

W danym wieku/epoce, projekty oparte były o obowiązujące wzorce

Definicja - ChristopherAlexander ⌘

Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.


Christopher Alexander

Co jest wzorcem? ⌘

Czy przypisanie do zmiennej, liczby elementów zmiennej tablicowej poza pętlą for, która po tej tablicy iteruje jest wzorcem?

Wzorzec kilograma ⌘

20a.jpg


Silbermann Kilogram, historical secondary mass standard, National Institute of Standards and Technology Virtual Museum, http://museum.nist.gov

Co jest wzorcem? ⌘

    for var = start_value to count(array) do
        //...
    endfor
    end_value := count(array_value)
    for var = start_value to end_value do
        //...
    endfor


Wzorce podlegają zmianom ⌘

adamowicz_ex1c.png


Arnold Schönberg (1874-1951) - macierz 12-tonów, Music Theory Online, http://www.mtosmt.org/

Znane zmiany wzorców znane z architektury IT ⌘

Active Record a Domain Model?

Podsumowanie? ⌘

Pytanie: Czym są wzorce projektowe?

Systematyzacja ⌘

Próba systematyzacji: definicje i opracowanie przez Gang of Four (rok 1994): E. Gamma, R. Helm, R. Johnson, J. Vlissides

Definicja - Design Patterns Book ⌘

A design pattern systematically names, motivates, and explains a general design that addresses a recurring design problem in object-oriented systems. It describes the problem, the solution, when to apply the solution, and its consequences. It also gives implementation hints and examples. The solution is a general arrangement of objects and classes that solve the problem. The solution is customized and implemented to solve the problem in a particular context.

Design Patterns Book.

Inne wzorce ⌘

Pytanie: Jaka jest różnica pomiędzy wzorcami projektowymi, architektonicznymi, analitycznymi i implementacyjnymi?

Podział wzorców projektowych ⌘

  • Kreacyjne
  • Strukturalne
  • Behawioralne

Podział wzorców projektowych - Kreacyjne ⌘

  • Kreacyjne – Opisują sposoby tworzenia obiektów
  • Strukturalne
  • Behawioralne

Podział wzorców projektowych - Strukturalne ⌘

  • Kreacyjne – Opisują sposoby tworzenia obiektów
  • Strukturalne – Opisują sposoby tworzenia struktur obiektów
  • Behawioralne

Podział wzorców projektowych - Behawioralne ⌘

  • Kreacyjne – Opisują sposoby tworzenia obiektów
  • Strukturalne – Opisują sposoby tworzenia struktur obiektów
  • Behawioralne – Opisują sposoby oddziaływania i dzielenia się odpowiedzialnością pomiędzy obiektami

Elementy opisu wzorca projektowego ⌘

  • Nazwa
  • Problem
  • Rozwiązanie
  • Konsekwencje

Elementy opisu wzorca projektowego - Nazwa ⌘

  • Nazwa: Singleton
  • Problem
  • Rozwiązanie
  • Konsekwencje

Elementy opisu wzorca projektowego - Problem ⌘

  • Nazwa: Strategia
  • Problem: Uniemożliwienie stworzenia więcej niż jednej instancji obiektu
  • Rozwiązanie
  • Konsekwencje:

Elementy opisu wzorca projektowego - Rozwiązanie ⌘

  • Nazwa: Strategia
  • Problem: Uniemożliwienie stworzenia więcej niż jednej instancji obiektu
  • Rozwiązanie
  • Konsekwencje

Elementy opisu wzorca projektowego - Konsekwencje ⌘

  • Nazwa: Strategia
  • Problem: Uniemożliwienie stworzenia więcej niż jednej instancji obiektu
  • Rozwiązanie
  • Konsekwencje: Mogą wystąpić problemy z testowaniem, często nazywany eufemizmem dla zmiennej globalnej, brak możliwości utworzenia drugiej instancji (np. możliwość utworzenia połączenia do dodatkowej bazy danych)

Elementy wzorca projektowego – co jeszcze możemy opisać? ⌘

  • Klasyfikacja
  • Struktura
  • Aliasy
  • Przykład
  • Podobne wzorce

Elementy wzorca projektowego – co jeszcze możemy opisać? - Klasyfikacja ⌘

  • Klasyfikacja – kreacyjny, strukturalny, behawioralny?
  • Struktura
  • Aliasy
  • Przykład
  • Podobne wzorce

Elementy wzorca projektowego – co jeszcze możemy opisać? - Struktura ⌘

  • Klasyfikacja – kreacyjny, strukturalny, behawioralny?
  • Struktura – prezentacja na diagramie UML
  • Aliasy
  • Przykład
  • Podobne wzorce

Elementy wzorca projektowego – co jeszcze możemy opisać? - Aliasy ⌘

  • Klasyfikacja – kreacyjny, strukturalny, behawioralny?
  • Struktura – prezentacja na diagramie UML
  • Aliasy – Nazwy alternatywne (Singleton - Samotnik)
  • Przykład
  • Podobne wzorce

Elementy wzorca projektowego – co jeszcze możemy opisać? - Przykłady ⌘

  • Klasyfikacja – kreacyjny, strukturalny, behawioralny?
  • Struktura – prezentacja na diagramie UML
  • Aliasy – Nazwy alternatywne (Singleton - Samotnik)
  • Przykład – ilustrujący praktyczne wykorzystanie
  • Podobne wzorce

Elementy wzorca projektowego – co jeszcze możemy opisać? - Podobne wzorce ⌘

  • Klasyfikacja – kreacyjny, strukturalny, behawioralny?
  • Struktura – prezentacja na diagramie UML
  • Aliasy – Nazwy alternatywne (Singleton - Samotnik)
  • Przykład – ilustrujący praktyczne wykorzystanie
  • Podobne wzorce – wzorce stanowiące alternatywne rozwiązanie

Klasyfikacja ⌘

  • Kreacyjne
  • Strukturalne
  • Behawioralne

Klasyfikacja - Kreacyjne ⌘

  • Kreacyjne – Builder, Factory, Prototype, Singleton
  • Strukturalne
  • Behawioralne

Klasyfikacja - Strukturalne ⌘

  • Kreacyjne – Builder, Factory, Prototype, Singleton
  • Strukturalne – Delegate, Facade, Composite, Adapter, Decorator, Bridge, Proxy
  • Behawioralne

Klasyfikacja - Behawioralne ⌘

  • Kreacyjne – Builder, Factory, Prototype, Singleton
  • Strukturalne – Delegate, Facade, Composite, Adapter, Decorator, Bridge, Proxy
  • Behawioralne – Command, Template method, Chain of responsibility (Intercepting filter), Observer, Strategy, Iterator

Opinie ⌘

Opinie - Developers.com ⌘

First, they provide you with a way to solve issues related to software development using a proven solution. The solution facilitates the development of highly cohesive modules with minimal coupling. They isolate the variability that may exist in the system requirements, making the overall system easier to understand and maintain. Second, design patterns make communication between designers more efficient.


Developers.com

Opinie - stackexchange.com ⌘

KISS first, patterns later, maybe much later. A pattern is a state of mind, mostly. Don't ever try to force your code into a specific pattern, rather notice which patterns start to crystalise out of your code and help them along a bit.


stackexchange.com

Opinie - artima.com ⌘

That you can customize behavior without having to touch existing code—one of the classical OO themes. You can reuse something adapted to your particular problem.


artima.com

Quiz ⌘

Adres: http://www.gofpatterns.com/design-patterns/module2/why-use-design-patterns-quiz.php


Lub poszukaj frazy: "why use design patterns quiz"

Omówienie konkretnych wzorców ⌘

Singleton ⌘

Jedna instancja danej klasy np. jeśli tworzenie instancji wymaga zaangażowania dużych zasobów. Singleton jest również uważany za antywzorzec zaprzeczający założeniom programowania obiektowego. Alternatywą dla Singletona jest zastosowanie kontenerów wstrzykiwania zależności.
Zadanie "God Save the Queen"

Builder ⌘

Rozdzielenie procesu tworzenia obiektów od ich reprezentacji. Dzięki zastosowaniu Buildera, możliwa jest dekompozycja i delegowanie specjalistycznych zadań.

Factory ⌘

Automatyzacja i ułatwienie procesu tworzenia obiektów. Wzorzec z tej samej rodziny - Abstract Factory – to upraszczając fabryka fabryk.
Zadanie "Simple Mailer"

Prototype ⌘

Tworzenie obiektów na podstawie już istniejących (na podstawie prototypów). Zastosowanie tego wzorca pozwala na uniknięcie powtarzania kodu (DRY) oraz może zaoszczędzić zasoby – klonowanie wymaga mniej zasobów niż tworzenie nowej instancji.
Zadanie "Quick Object Persistence"

Delegate ⌘

Pozwala na przeniesienie niektóry funkcjonalności (delegowanie zadań) na rzecz innej klasy.

Facade ⌘

Agregacja zadań (które zazwyczaj wykonywane są razem) różnych klas do jednej klasy – fasady.
Zadanie "Simple Mailer"

Composite ⌘

Wzorzec przeznaczony do pracy z danymi ujętymi w strukturze drzewiastej. Jego zadamniem jest ujednolicenie intrefejsu pomiędzy liśćmi a kompozytami.
Zadanie "Empleyee Hierarchy"

Adapter ⌘

Różnice interfejsów między systemem a zewnętrzną biblioteka. Zastosowanie tego wzorca ułatwia integrację bibliotek zewnętrznych które posiadają inny interfejs niż system.
Zadanie "French Code Legacy"

Decorator ⌘

Umożliwia wzbogacenie funkcjonalności danej klasy. Czemu więc nie zastosować dziedziczenia? Dodatkowe funkcjonalności nie są związane z przeznaczeniem dekorowanej klasy.
Zadanie "Dummy Registration"

Bridge ⌘

Konieczność odseparowania abstrakcji od implementacji. Pozwala na uniknięcie eksplozji kombinacji m*n.

Proxy ⌘

Ułatwia pracę ze zdalnymi obiektami, oraz pozwala na odłożenie w czasie tworzenia obiektu wymagającego zaangażowania dużej ilości zasobów (CPU, RAM, etc.)
Zadanie "Rocket Post Manager"

Command ⌘

Pozwala na enkapsulację zadań, parametryzowanie ich a dalej na ich kolejkowanie i anulowanie. Pozwala na wykonanie pewnych zadań atomowo.
Zadanie "Profile Image Manager"

Template Method ⌘

Pozwala na separację implementacji od abstrakcji. Abstrakcja definiuje szablon algorytmu a implementacje dotyczą tylko poszczególnych jego kroków.

Chain Of Responsibility ⌘

Pozwala na utworzenie kolejki (łańcucha) pewnych zadań. Ponadto, w przypadku kiedy jedno z ogniw nie może obsłużyć żądania przekazuje je do zdefiniowanego, kolejnego ogniwa. Odmianą tego wzorca jest Intercepting Filters (Przechwytywane filtry) dzięki którym można usystematyzować pewne grupy, często wykonywanych zadań.
Zadanie "Simple Mailer", "Spam Protection"

Observer ⌘

Pozwala na dodanie dodatkowej funkcjonalności do istniejących klas. Umożliwia tworzenie architektury opartej o zdarzenia (EOA). Dodanie nowej funkcjonalności (tu tożsame z reakcją na zdarzenie) nie wymaga modyfikacji istniejącego kodu, zmian konfiguracyjnych czy tworzenia klas pochodnych.

Strategy ⌘

Umożliwia wybór i manipulację strategiami wykonywania danej czynności. Separuję konkretną strategię od klienta. Uwaga! Niejednokrotnie przykłady opisujące wzorzec Stategy i Factory są pozornie podobne. Factory pozwala na parametryzację tworzenia konkretnych instancji podczas gdy Strategy na parametryzację pewnych zadań.

Iterator ⌘

Pozwala na dostęp do elementu znajdujcego się w kolekcji obiektów.
Zadanie "Empleyee Hierarchy"