![Wzorce projektowe w PHP](/images/patterns/languages/php.png?id=1cbf824491cf68f4e8e078f7a8c231c5)
![Wzorce projektowe w PHP](/images/patterns/languages/mini/php.png?id=c8a3181ebbd3142ec91a6a5ce5e5a12e)
Wzorce projektowe w PHP
Katalog przykładów w PHP
Wzorce kreacyjne
![Fabryka abstrakcyjna](/images/patterns/cards/abstract-factory-mini.png?id=4c3927c446313a38ce77dfee38111e27)
Fabryka abstrakcyjna
Umożliwia tworzenie rodzin spokrewnionych ze sobą obiektów bez określania ich konkretnych klas.
![Budowniczy](/images/patterns/cards/builder-mini.png?id=19b95fd05e6469679752c0554b116815)
Budowniczy
Daje możliwość konstruowania złożonych obiektów krok po kroku. Wzorzec ten pozwala produkować różne typy oraz reprezentacje obiektu używając tego samego kodu konstrukcyjnego.
![Metoda wytwórcza](/images/patterns/cards/factory-method-mini.png?id=72619e9527893374b98a5913779ac167)
Metoda wytwórcza
Udostępnia interfejs do tworzenia obiektów w klasie bazowej, ale pozwala podklasom zmieniać typ tworzonych obiektów.
![Prototyp](/images/patterns/cards/prototype-mini.png?id=bc3046bb39ff36574c08d49839fd1c8e)
Prototyp
Umożliwia kopiowanie istniejących obiektów bez tworzenia zależności pomiędzy twoim kodem, a ich klasami.
![Singleton](/images/patterns/cards/singleton-mini.png?id=914e1565dfdf15f240e766163bd303ec)
Singleton
Pozwala zachować pewność, że istnieje wyłącznie jedna instancja danej klasy oraz istnieje dostęp do niej w przestrzeni globalnej.
Wzorce strukturalne
![Adapter](/images/patterns/cards/adapter-mini.png?id=b2ee4f681fb589be5a0685b94692aebb)
Adapter
Pozwala na współdziałanie obiektów o niekompatybilnych interfejsach.
![Most](/images/patterns/cards/bridge-mini.png?id=b389101d8ee8e23ffa1b534c704d0774)
Most
Pozwala podzielić dużą klasę lub blisko spokrewnione ze sobą klasy na dwie hierarchie: abstrakcję oraz implementację, nad którymi można pracować niezależnie od siebie.
![Kompozyt](/images/patterns/cards/composite-mini.png?id=a369d98d18b417f255d04568fd0131b8)
Kompozyt
Pozwala komponować obiekty w struktury drzewiaste, a potem traktować je tak, jakby były one osobnymi obiektami.
![Dekorator](/images/patterns/cards/decorator-mini.png?id=d30458908e315af195cb183bc52dbef9)
Dekorator
Pozwala nadać dodatkowe obowiązki obiektom poprzez umieszczenie tych obiektów w specjalnych obiektach opakowujących, które zawierają odpowiednie zachowania.
![Fasada](/images/patterns/cards/facade-mini.png?id=71ad6fa98b168c11cb3a1a9517dedf78)
Fasada
Wyposaża bibliotekę, framework lub inny złożony zestaw klas w uproszczony interfejs.
![Pyłek](/images/patterns/cards/flyweight-mini.png?id=422ca8d2f90614dce810a8812c626698)
Pyłek
Pozwala zmieścić większą liczbę obiektów w dostępnej pamięci RAM poprzez współdzielenie elementów opisujących stan obiektu. Część opisu stanu jest wspólna dla wielu obiektów, więc nie muszą one zawierać kopii wszystkich danych.
![Pełnomocnik](/images/patterns/cards/proxy-mini.png?id=25890b11e7dc5af29625ccd0678b63a8)
Pełnomocnik
Pozwala tworzyć zastępcę dla innego obiektu. Pełnomocnik nadzoruje dostęp do pierwotnego obiektu, pozwalając na wykonanie jakiejś czynności przed lub po przekazaniu do niego żądania.
Wzorce behawioralne
![Łańcuch zobowiązań](/images/patterns/cards/chain-of-responsibility-mini.png?id=36d85eba8d14986f053123de17aac7a7)
Łańcuch zobowiązań
Pozwala przekazywać żądania według łańcucha obiektów obsługujących. Otrzymawszy żądanie, każdy z obiektów obsługujących decyduje o zrealizowaniu żądania lub przekazaniu go do swojego następnika w łańcuchu.
![Polecenie](/images/patterns/cards/command-mini.png?id=b149eda017c0583c1e92343b83cfb1eb)
Polecenie
Zmienia żądanie w samodzielny obiekt zawierający wszystkie informacje o tym żądaniu. Taka transformacja pozwala na parametryzowanie metod przy przy użyciu różnych żądań. Oprócz tego umożliwia opóźnianie lub kolejkowanie wykonywania żądań oraz pozwala na cofanie operacji.
![Iterator](/images/patterns/cards/iterator-mini.png?id=76c28bb48f997b36965983dd2b41f02e)
Iterator
Pozwala przechodzić sekwencyjnie po elementach zbioru bez konieczności eksponowania jego formy (lista, stos, drzewo, itp.).
![Mediator](/images/patterns/cards/mediator-mini.png?id=a7e43ee8e17e4474737b1fcb3201d7ba)
Mediator
Pozwala zredukować chaos zależności pomiędzy obiektami. Wzorzec ogranicza bezpośrednią komunikację pomiędzy obiektami i zmusza je do współpracy wyłącznie za pośrednictwem obiektu mediatora.
![Pamiątka](/images/patterns/cards/memento-mini.png?id=8b2ea4dc2c5d15775a654808cc9de099)
Pamiątka
Pozwala zapisywać i przywracać wcześniejszy stan obiektu bez ujawniania szczegółów jego implementacji.
![Obserwator](/images/patterns/cards/observer-mini.png?id=fd2081ab1cff29c60b499bcf6a62786a)
Obserwator
Pozwala zdefiniować mechanizm subskrypcji by powiadamiać wiele obiektów o zdarzeniach odbywających się w obserwowanym obiekcie.
![Stan](/images/patterns/cards/state-mini.png?id=f4018837e0641d1dade756b6678fd4ee)
Stan
Pozwala obiektowi zmienić swoje zachowanie gdy zmieni się jego wewnętrzny stan. Wygląda to tak, jakby obiekt zmienił swoją klasę.
![Strategia](/images/patterns/cards/strategy-mini.png?id=d38abee4fb6f2aed909d262bdadca936)
Strategia
Pozwala zdefiniować rodzinę algorytmów, umieścić je w osobnych klasach i uczynić obiekty tych klas wymienialnymi.
![Metoda szablonowa](/images/patterns/cards/template-method-mini.png?id=9f200248d88026d8e79d0f3dae411ab4)
Metoda szablonowa
Definiuje szkielet algorytmu w klasie bazowej, ale umożliwia podklasom nadpisanie poszczególnych etapów algorytmu bez konieczności zmiany jego struktury.
![Odwiedzający](/images/patterns/cards/visitor-mini.png?id=854a35a62963bec1d75eab996918989b)
Odwiedzający
Pozwala oddzielić algorytmy od obiektów na których pracują.