head File
//AdapterPattern.h #ifndef ADAPTER_PATTERN_H #define ADAPTER_PATTERN_H #include <Windows.h> namespace AdapterPattern { class Adaptee { public: Adaptee(); ~Adaptee(); void SpecificRequest(); }; // Base Class ////////////////////////////////////////////////////////////////////////// class Adapter { public: Adapter(); virtual ~Adapter(); virtual void Request() = 0; }; class ConcreteAdapterA : public Adapter { public: ConcreteAdapterA(); virtual ~ConcreteAdapterA(); virtual void Request(); private: Adaptee* m_pAdaptee; }; class ConcreteAdapterB : public Adapter, Adaptee { public: ConcreteAdapterB(); virtual ~ConcreteAdapterB(); virtual void Request(); }; ////////////////////////////////////////////////////////////////////////// void AdapterPattern_Test_Object(); void AdapterPattern_Test_Class(); } #endif
accomplish
#include "AdapterPattern.h" #include <iostream> using namespace std; namespace AdapterPattern { ////////////////////////////////////////////////////////////////////////// Adaptee::Adaptee() { } Adaptee::~Adaptee() { } void Adaptee::SpecificRequest() { cout << "Adaptee::SpecificRequest()\n" ; } ////////////////////////////////////////////////////////////////////////// Adapter::Adapter() { } Adapter::~Adapter() { } ////////////////////////////////////////////////////////////////////////// ConcreteAdapterA::ConcreteAdapterA() : m_pAdaptee(new Adaptee) { } ConcreteAdapterA::~ConcreteAdapterA() { if (m_pAdaptee != NULL) { delete m_pAdaptee; m_pAdaptee = NULL; } } void ConcreteAdapterA::Request() { m_pAdaptee->SpecificRequest(); cout << "ConcreteAdapterA::Request()\n" ; } ////////////////////////////////////////////////////////////////////////// ConcreteAdapterB::ConcreteAdapterB() { } ConcreteAdapterB::~ConcreteAdapterB() { } void ConcreteAdapterB::Request() { Adaptee::SpecificRequest(); cout << "ConcreteAdapterB::Request()\n" ; } ////////////////////////////////////////////////////////////////////////// void AdapterPattern_Test_Object() { ConcreteAdapterA* pAdapter = new ConcreteAdapterA(); pAdapter->Request(); delete pAdapter; pAdapter = NULL; } void AdapterPattern_Test_Class() { ConcreteAdapterB* pAdapter = new ConcreteAdapterB(); pAdapter->Request(); delete pAdapter; pAdapter = NULL; } }
client
#include "AdapterPattern.h" #include <iostream> using namespace AdapterPattern; void main() { AdapterPattern_Test_Object(); AdapterPattern_Test_Class(); }
operation result