가교( bridge )
Posted 2012. 10. 23. 13:47추상과 구현을 분리한 패턴
즉, 인터페이스는 같고 내부 구현은 다르게 하고 싶은 경우.
장점.
1. 인터페이스와 구현을 불리해준다.
2. 실행 시간에 구현 객체를 결정 할 수 있다.
3. 인터페이스과 구현이 분리됨으로써 내부 구현ㅇ ㅣ변경되더라도 client는
컴파일 할 필요가 없다.
4. client는 인터페이스의 내부 구현을 알수 없다.
주로 Lib에 많이 사용 된다.
Abstraction - 추상 인터페이스를 정의한다. Implementor에 대한 레퍼런스를 유지한다.
RefinedAbstraction - Abstraction에 의해 정의된 인터페이스를 확장한다.(extends)
Implementor - 구현 클래스를 위한 인터페이스를 정의한다.
ConcreteImplementor - Implementor 인터페이스를 구현한다.
#include <iostream>
#include <iomanip> // 출력 스트림 방식 결정 하는 헤더 파일
#include <string.h>
using namespace std;
class TimeImp
{
public:
TimeImp( int hr, int min )
{
hr_ = hr;
min_ = min;
}
virtual void tell()
{
cout << "time is " << setw(2) << hr_ << min_ << endl;
}
protected:
int hr_, min_;
};
// 민간인 시간
class civilianTimeImp : public TimeImp
{
public:
civilianTimeImp( int hr, int min, int pm ) : TimeImp( hr, min )
{
if( pm )
strcpy( whichm_, " PM");
else
strcpy( whichm_, " AM");
}
/*virtual*/
void tell()
{
cout << "time is " << hr_ << ":" << min_ << whichm_ << endl;
}
protected:
char whichm_[4];
};
//군대 시간
class ZuluTimeImp : public TimeImp
{
public:
ZuluTimeImp( int hr, int min, int zone ) : TimeImp( hr, min )
{
if( zone == 5 )
strcpy( zone_, " Eastern Standard Time");
else if( zone == 6 )
strcpy( zone_, " Central Standard Time");
}
/*virtual*/
void tell()
{
cout << "time is " << setw(2) << hr_ << min_ << zone_ << endl;
}
protected:
char zone_[30];
};
class Time
{
public:
Time(){}
Time( int hr, int min )
{
imp_ = new TimeImp( hr, min );
}
virtual void tell()
{
imp_->tell();
}
protected:
TimeImp *imp_;
};
class CivilianTime : public Time
{
public:
CivilianTime( int hr, int min, int pm )
{
imp_ = new civilianTimeImp(hr, min, pm);
}
};
class ZuluTime : public Time
{
public:
ZuluTime( int hr, int min, int zone )
{
imp_ = new ZuluTimeImp( hr, min ,zone );
}
};
void main()
{
Time *times[3];
times[0] = new Time(14, 30);
times[1] = new CivilianTime(2, 30, 1);
times[2] = new ZuluTime(14, 30, 6);
for( int i = 0 ; i < 3 ; i++ )
{
times[i]->tell();
}
}
출력
->time is 1430
->time is 2:30 PM
->time is 1430 Central Standard Time
- Filed under : 디자인 패턴/2. 가교( Bridge )