wtorek, sierpnia 24

Gang of Four

Witam,
po pracowitym okresie nauki do SCJP i zdaniu egzaminu,

postanowiłem zrealizować mój stary pomysł szybkiego re-view wszystkich 23 wzorców przedstawionych przez Gang of Four, a po raz pierwszy zaprezentowanych w książce Design Patterns: Elements of Reusable Object-Oriented Software. Każdy wzorzec zostanie wyposażony w diagram, opis, przykład użycia oraz namiar na inne źródła z informacjami.


Creational Patterns, używane do tworzenia instancji w taki sposób by w jak największym stopniu ukryć logikę i skomplikowanie procesu tworzenia.

  • Abstract Factory - pozwala na zgrupowanie fabryk działających w tej samej domenie,
  • Builder - oddziela budowanie obiektu od prezentacji, ma za zadanie ukryć skomplikowany proces budowania,
  • Factory Method - budowanie złożonego obiektu bez dokładnego wyspecyfikowania drzewa zwróconych obiektów,
  • Prototype - tworzenie nowej instancji klasy na podstawie już istniejącej instancji,
  • Singleton - ma za zadanie zbudowanie tylko jednej instancji klasy. Niektóre źródła podają ten wzorzec jako 'antywzorzec'.


Structural Patterns, skupione są na klasach i dużych strukturach obiektów. Poprzez wykorzystanie dziedziczenia i kompozycji pozwalają na utworzenie nowych funkcjonalności na podstawie już istniejących.

  • Adapter - pozwalana na współpracę klas z niekompatybilnymi interfejsami,
  • Bridge - bardzo mocne oddzielenie(low coupling) formy abstrakcyjnej klasy od implementacji, co pozwala je traktować niezależnie,
  • Composite - zebranie kilku obiektów w jeden, pozwala to na manipulowanie obiektami jak by były jednym obiektem,
  • Decorator - dynamicznie dodaje/nadpisuje zachowanie metod w obiektach,
  • Facade - udostępnia uproszczoną formę dużej ilości złożonego kodu,
  • Flyweight - zmniejsza koszt tworzenia i manipulowania dużą liczbą podobnych obiektów,
  • Proxy - zastępnik dla innego obiektu, ma za zadanie kontrolować dostęp, zredukować koszt użycia.


Behavioral Patterns, mają za zadanie uprościć komunikację, dzielenie się obowiązkami pomiędzy obiektami.

  • Chain of Responsibility - deleguje polecenia do łańcucha przetwarzania,
  • Command - tworzy obiekt enkapsulujący działanie i parametry,
  • Interpreter - interpretuje nasz wewnętrzny język (nasz mały DSL),
  • Iterator - sekwencyjny dostęp do obiektów bez zdradzania wewnętrznej implementacji,
  • Mediator - pozwala na luźne powiązanie klas, gdzie tylko mediator posiada informację o budowie obiektów. Klasy wzajemnie nie posiadają informacji o swoich metodach,
  • Memento - umożliwia zawsze przywrócenie obiektu do stanu z przed zmiany, operacja(undo),
  • Observer - wzorzec publish/subscribe pozwala dużej liczbie obserwatorów(observers) zobaczyć zdarzenia,
  • State - pozwala na zmianę zachowania obiektu, gdy jego stan ulegnie zmianie,
  • Strategy - pozwala na wybieranie algorytmu ze zbioru podczas runtime'u,
  • Template Method - definiuje szkielet algorytmu jako klasę abstrakcyjną, konkretne implementacje precyzują poszczególne zachowania,
  • Visitor - wydzielenie algorytmu ze struktury na której pracuje.


Polecam też kilka anglojęzycznych katalogów wzorców: