Adapter to strukturalny wzorzec projektowy pozwalający na współpracę niekompatybilnych obiektów ze sobą.
Adapter pełni rolę opakowania dwóch obiektów. Przechwytuje wywołania jednego z obiektów i przekształca je na format i interfejs zrozumiały dla drugiego obiektu.
Przykłady użycia: Wzorzec Adapter jest dość powszechny w kodzie PHP. Często stosuje się go w systemach bazujących na jakimś przestarzałym kodzie, gdzie umożliwiają współpracę takiego kodu z nowoczesnymi klasami.
Identyfikacja: Adapter można rozpoznać po konstruktorze przyjmującym instancję innego typu abstrakcji/interfejsu. Gdy adapter otrzymuje wywołanie kierowane do którejś z jego metod, tłumaczy parametry wywołania do stosownego formatu i przekazuje je do jednej lub wielu metod opakowanego obiektu.
Przykład koncepcyjny
Poniższy przykład ilustruje strukturę wzorca Adapter ze szczególnym naciskiem na następujące kwestie:
Z jakich składa się klas?
Jakie role pełnią te klasy?
W jaki sposób elementy wzorca są ze sobą powiązane?
Poznawszy strukturę wzorca będzie ci łatwiej zrozumieć następujący przykład, oparty na prawdziwym przypadku użycia PHP.
index.php: Przykład koncepcyjny
Output.txt: Wynik działania
Przykład z prawdziwego życia
Wzorzec Adapter pozwala wykorzystać klasy innego producenta lub klasy przestarzałe w swoim kodzie, mimo ich niekompatybilności. Na przykład, zamiast przepisywać na nowo swój interfejs powiadamiający tak, aby wspierał wszystkie usługi typu Slack, Facebook, SMS (i tak dalej) możesz stworzyć zestaw specjalnych nakładek które będą dostosowywać wywołania pochodzące z twojego kodu na zgodne z klasami zewnętrznych dostawców.