사용자 도구
관리
로그인
추적:
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Adapter 패턴 ====== ===== 타입 ===== Structural Pattern ===== 문제 ===== 기존에 개발되어 있는 모듈을 우리 시스템에서 사용하려 했더니 인터페이스가 달라 사용하기 힘들다. ===== 해결 ===== * 다중 상속을 이용한다. (클래스 어댑터) * 클래스 내부에 기존에 개발되어 있는 모듈을 위한 객체를 멤버 변수로 선언한다. (객체 어댑터) ===== 클래스 다이어그램 ===== {{:programming:design_pattern:adapter.png|}} ===== 예제 ===== <file cpp class_adapter.cpp> #include <iostream> using namespace std; struct POINT { int x,y; }; // 도형 class CShape { public: virtual void GetShapeInfo(POINT& ptTopLeft, POINT& ptBottomRight) {} }; // 사각형 보기 class CRectView { public: void GetOrigin(int x, int y) { cout << x << " " << y << endl; } void GetSize(int nWidth, int nHeight) { cout << nWidth << " " << nHeight << endl; } }; // 사각형 class CRectangle : public CShape, public CRectView { public: virtual void GetShapeInfo(POINT& ptTopLeft, POINT& ptBottomRight) { GetOrigin(ptTopLeft.x, ptTopLeft.y); GetSize(ptBottomRight.x - ptTopLeft.x, ptBottomRight.y - ptTopLeft.y); } }; int main(void) { CShape* rect = new CRectangle; POINT pt1 = {3, 4}; POINT pt2 = {7, 8}; rect->GetShapeInfo(pt1, pt2); delete rect; return 0; } </file> <file cpp object_adapter.cpp> class CRectangle : public CShape { private: CRectView pView; public: virtual void GetShapeInfo(POINT& ptTopLeft, POINT& ptBottomRight) { pView.GetOrigin(ptTopLeft.x, ptTopLeft.y); pView.GetSize(ptBottomRight.x - ptTopLeft.x, ptBottomRight.y - ptTopLeft.y); } }; </file> 나머지 부분은 클래스 어댑터와 동일 ===== 참고 ===== http://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns#Adapter \\ http://showmiso.tistory.com/120
문서 도구
문서 보기
이전 판
역링크
PDF로 내보내기
맨 위로
PDF Export
내용으로 건너뛰기
OBG WiKi
사이트 도구
검색
최근 바뀜
미디어 관리자
사이트맵