#include <iostream>
using namespace std;
// Bridge 패턴: 인터페이스와 구현을 분리한다.
// 모든 MP3 player의 인터페이스
struct MP3PlayImp
{
virtual void Play() = 0;
virtual void Stop() = 0;
};
// 결국 인터페이스와 구현을 분리하는 개념.
// 사용자는 play와 stop만 가져다 쓰면 되고
// 제공자는 class만 제공하면 되도록 해야 한다.!!!
// 실제 GUI기능을 갖춘 MP3 Player 클래스
class MP3Play
{
MP3PlayImp* pImp;
public:
void Play()
{
// 위임(Delegate)라고 한다. - 구현물을 쉽게 바꿀수 있다.
// PIMP 라는 개념.
PImp->Play();
}
void Stop()
{
PImp->Stop();
}
};
void main()
{
// MP3 사용자
MP3Play p;
p.Play();
p.Stop();
}
//////////////////////////////////////////////////////////
// linked list를 만들고 싶다. 값을 추가하는 함수를 만들고 싶다.
// 함수 이름을 무엇으로 할까?
// 실제 list의 구현물( 구현의 클래스 )
class real_list
{
public:
void real_push_front( int a ) { }
void real_push_back( int a ) { }
};
// 내부구현이다른list
class real_list2
{
public:
void real_push_front( int a )
{
//전혀 다른 기법을 사용한다.
}
void real_push_back( int a )
{
//전혀 다른 기법을 사용한다.
}
};
// 인터페이스 클래스
class list
{
real_list* st;
public:
void push_front( int a ) { st->real_push_front(a); }
void push_back( int a ) { st->real_push_back(a); }
};