Wzorzec projektowy adapter

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3970 razy

Opis wzorca projektowego adapter

Wzorzec projektowy adapter należy do strukturalnych wzorców projektowych i umożliwia on zaimplementowanie tego samego interfejsu w klasach, które nie są kompatybilne. Taka sytuacja może mieć miejsce, gdy korzysta się z klas znajdujących się w bibliotekach dll, gdzie nie ma możliwości ich modyfikacji lub w sytuacji, gdy takie dostosowanie było by zbyt czasochłonne.

Przykład diagramu UML dla wzorca projektowego adapter

Dla przykładu utwórzmy sobie klasę Point2d, która dziedziczy tylko po interfejsie iPoint2d. Należy zastosować wzorzec projektowy adapter jako klasę Vector3d, który dziedziczyć będzie klasę Point2d oraz interfejs iPoint3d. Z tego interfejsu będzie korzystał użytkownik (czyli dalsza część kodu nie związana już z samym wzorcem projektowym adapter).

Przykładowy diagram UML wzorca projektowego adapter
Rys. 1
Przykładowy diagram UML wzorca projektowego adapter

Przykładowa implementacja wzorca projektowego adapter

#include <iostream> class iPoint2d{ public: virtual void writePoint() const = 0; virtual double getX() const = 0; virtual double getY() const = 0; }; class Point2d : public iPoint2d{ protected: double x; double y; public: Point2d(double x, double y) : x(x), y(y){} virtual void writePoint() const { std::cout<<"Punkt 2W: {"<<x<<", "<<y<<"}"<<std::endl; } inline virtual double getX() const{ return x; } inline virtual double getY() const{ return y; } }; class iPoint3d{ public: virtual double getZ() const = 0; virtual void writePoint() const = 0; virtual double getX() const = 0; virtual double getY() const = 0; }; class Vector3d : public iPoint3d, private Point2d{ public: Vector3d(const iPoint2d* p2d) : Point2d(p2d->getX(), p2d->getY()){ std::cout<<"Create adapter"<<std::endl<<std::endl; } virtual void writePoint() const{ std::cout<<"Punkt 3W: {"<<x<<", "<<y<<", 0}"<<std::endl; } inline virtual double getZ() const{ return 0; } inline virtual double getX() const{ return x; } inline virtual double getY() const{ return y; } }; int main(){ iPoint2d* p2d = new Point2d(100,100); p2d->writePoint(); std::cout<<std::endl; iPoint3d* p3d = new Vector3d(p2d); p3d->writePoint(); if(p3d){ delete p3d; p3d = NULL; } if(p2d){ delete p2d; p2d = NULL; } std::cin.get(); return 0; }

Wynik działania programu:

Punkt 2W: {100, 100}

Create adapter

Punkt 3W: {100, 100, 0}
Strony powiązane
strony powiązane
  1. sourcemaking.com/design_patterns/adapter - strona opisująca wzorzec projektowy adapter [En]
  2. pl.wikipedia.org - opis tego wzorca na stronie Wikipedii
Propozycje książek
tytuł: C++. Projektowanie oprogramowania. Zasady i wzorce projektowe autor: Klaus Iglberger

Tytuł:

C++. Projektowanie oprogramowania. Zasady i wzorce projektowe

Autor:

Klaus Iglberger

tytuł: Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II autor: Eric Freeman, Elisabeth Robson

Tytuł:

Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II

Autor:

Eric Freeman, Elisabeth Robson

tytuł: React 17. Wzorce projektowe i najlepsze praktyki. Projektowanie i rozwijanie nowoczesnych aplikacji internetowych. Wydanie III autor: Carlos Santana Roldán

Tytuł:

React 17. Wzorce projektowe i najlepsze praktyki. Projektowanie i rozwijanie nowoczesnych aplikacji internetowych. Wydanie III

Autor:

Carlos Santana Roldán

tytuł: Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II autor: Eric Freeman, Elisabeth Robson

Tytuł:

Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II

Autor:

Eric Freeman, Elisabeth Robson

tytuł: Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F# autor: Dmitri Nesteruk

Tytuł:

Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#

Autor:

Dmitri Nesteruk

tytuł: Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku autor: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Tytuł:

Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku

Autor:

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

tytuł: Projektowanie interfejsów., Sprawdzone wzorce projektowe. Wydanie III autor: Jenifer Tidwell, Charles Brewer, Aynne Valencia-Brooks

Tytuł:

Projektowanie interfejsów., Sprawdzone wzorce projektowe. Wydanie III

Autor:

Jenifer Tidwell, Charles Brewer, Aynne Valencia-Brooks

tytuł: Kubernetes. Wzorce projektowe. Komponenty wielokrotnego użycia do projektowania natywnych aplikacji chmurowych autor: Bilgin Ibryam,  Roland Huß

Tytuł:

Kubernetes. Wzorce projektowe. Komponenty wielokrotnego użycia do projektowania natywnych aplikacji chmurowych

Autor:

Bilgin Ibryam, Roland Huß

tytuł: Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F# autor: Dmitri Nesteruk

Tytuł:

Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#

Autor:

Dmitri Nesteruk

tytuł: Programowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II autor: Alan Shalloway, James R. Trott

Tytuł:

Programowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II

Autor:

Alan Shalloway, James R. Trott

W związku z tym, że firma Helion nie wywiązuje się z swoich zobowiązań naliczania prowizji za każdą zakupioną książkę a kontakt z ową frmą jest nie możliwy autor strony zmuszony został do zablokowania linkowania książek. Za wszelkie niedogodności z tym związane z góry przepraszam i obiecuję włączenie linkowania gdy tylko sprawa zostanie wyjaśniona