-----------------------------------------------------------------------------
[Adapter]
의도:
클래스의 인터페이스를 클라이언트가 기대하는 형태의 인터페이스로 변환한다.
어댑터 패턴은 서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 작동 시킨다.
다른 이름:
Wrapper
-----------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////
//
// A Structural part of GoF's Design Patterns
//
// - Adapter
//
/////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <tchar.h>
#include <iostream>
#include <memory>
/////////////////////////////////////////////////////////////////////////////
//
// Adapter-1
//
//
/////////////////////////////////////////////////////////////////////////////
class Target
{
public:
virtual ~Target() {}
public:
virtual void Request (void) = 0;
};
class Adaptee
{
public:
void SpecificRequest (void)
{
std::cout << "Adaptee::SpecificRequest()" << std::endl;
}
};
class Adapter_1 :
public Target,
private Adaptee
{
public:
virtual void Request (void)
{
std::cout << "Adaptee::SpecificRequest()" << std::endl;
}
};
/////////////////////////////////////////////////////////////////////////////
//
// Adapter-2
//
//
/////////////////////////////////////////////////////////////////////////////
class Adapter_2 :
public Target
{
public:
virtual void Request (void)
{
Adaptee_.SpecificRequest();
}
private:
Adaptee Adaptee_;
};
/////////////////////////////////////////////////////////////////////////////
//
// Startup
//
//
/////////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
std::auto_ptr<Target> t1 ( new Adapter_1() );
std::auto_ptr<Target> t2 ( new Adapter_2() );
t1->Request ();
t2->Request ();
return 0;
}
-----------------------------------------------------------------------------
Adaptee::SpecificRequest()
Adaptee::SpecificRequest()