Search Results for '디자인 패턴/2. 가교( Bridge )'

1 POSTS

  1. 2012.10.23 가교( bridge )

가교( 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