Wzorzec projektowy fabryka abstrakcyjna - abstract factory
Wzorzec projektowy budowniczy - builder
Wzorzec projektowy metoda wytwórcza - factory method
Wzorzec projektowy prototyp - prototype
Wzorzec projektowy singleton
Wzorzec projektowy adapter
Wzorzec projektowy dekorator - decorator
Wzorzec projektowy fasada - facade
Wzorzec projektowy kompozyt - composite
Wzorzec projektowy most - bridge
Wzorzec projektowy pełnomocnik - proxy
Wzorzec projektowy pyłek - flyweight
Wzorzec projektowy łańcuch zobowiązań - chain of responsibility
Wzorzec projektowy polecenie - command
Wzorzec projektowy interpreter
Wzorzec projektowy iterator
Wzorzec projektowy mediator
Wzorzec projektowy pamiątka - memento
Wzorzec projektowy metoda szablonowa - template method
Wzorzec projektowy obserwator - observer
Wzorzec projektowy stan - state
Wzorzec projektowy strategia - strategy
Wzorzec projektowy odwiedzający - visitor
Ta strona należy do działu:
Programowanie poddziału
Wzorce projektowe Autor podstrony: Krzysztof Zajączkowski
Stronę tą wyświetlono już: 4122 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
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