Попытался реализовать паттерн адаптер с композицией объектов и с наследованием, получилось примерно так:
Вопрос заключается в том, правильно ли я реализовал этот паттерн и, если нет, то в чем ошибка или неточность, подскажите пожалуйста?
(реализация с композицией объектов)
class AbstractTarget {
public:
virtual ~AbstractTarget() {};
virtual void Request() = 0;
};
class ConcreteTarget : public AbstractTarget {
public:
void Request() {
//...реализация
}
};
class AbstractAdaptee {
public:
virtual ~AbstractAdaptee() {};
virtual void SpecificRequest() = 0;
};
class ConcreteAdaptee : public AbstractAdaptee {
public:
void SpecificRequest() {
//...адаптируемая реализация
}
};
class Adapter : public AbstractTarget {
public:
Adapter(AbstractAdaptee* other_adaptee): adaptee(other_adaptee) {};
void Request() {
this->adaptee->SpecificRequest();
}
protected:
AbstractAdaptee* adaptee;
};
(реализация с наследованием)
class AbstractTarget {
public:
virtual ~AbstractTarget() {};
virtual void Request() = 0;
};
class ConcreteTarget : public AbstractTarget {
public:
void Request() {
//...реализация
}
};
class AbstractAdaptee {
public:
virtual ~AbstractAdaptee() {};
virtual void SpecificRequest() = 0;
};
class ConcreteAdaptee : public AbstractAdaptee {
public:
void SpecificRequest() {
//...адаптируемая реализация
}
};
class Adapter: public AbstractTarget, private AbstractAdaptee {
public:
void Request() {
SpecificRequest();
}
};