- 서로 다른 클래스끼리 함께 동작할 수 있도록 인터페이스를 변환하는 패턴
- 재사용하려고 하는 인터페이스가 맞지 않거나 수정할 수 없을 때
- 두개의 소스는 전혀 수정이 되지 않고 어댑터 클래스를 추가히여 두개의 사이를 연결해준다
- 하나의 클래스와 이 클래스의 모든 서브클래스들을 개조할 때에는 사용할 수 없다.
- 적응자만 계속 늘려나가다보면 본래 인터페이스보다 커지는 경우가 발생한다.
AndroidPhone 클래스 (adaptee)
class AndroidPhone { public: void Charge() { cout << "charging..." << endl; }; };
USB 클래스
class USB { public: virtual void Plug() = 0; };
USBtoMicro5pinA 클래스 (object adapter type)
class USBtoMicro5pinA : public USB { public: USBtoMicro5pinA() { pAndroidPhone = new AndroidPhone(); }; ~USBtoMicro5pinA() { if (pAndroidPhone) delete pAndroidPhone; pAndroidPhone = NULL; }; virtual void Plug() { cout << "A Type :"; pAndroidPhone->Charge(); }; private: AndroidPhone* pAndroidPhone; };
USBtoMicro5pinB 클래스 (class adapter type)
class USBtoMicro5pinB : public USB, public AndroidPhone { public: virtual void Plug() { cout << "B Type :"; Charge(); }; };
실행 부분
void main() { // object adapter auto_ptr<USB> pUSBtoMicro5pinA(new USBtoMicro5pinA()); pUSBtoMicro5pinA->Plug(); // class adapter auto_ptr<USB> pUSBtoMicro5pinB(new USBtoMicro5pinB()); pUSBtoMicro5pinB->Plug(); }
UML - class 다이어그램
class adapter
참고
- GoF의 디자인 패턴(개정판) 재사용성을 지닌 객체지향 소프트웨어의 핵심요소
- http://blog.naver.com/jak500/220334322118
- http://blog.naver.com/ktmgame/20204622582
댓글 없음:
댓글 쓰기
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.