의도
CExec 클래스
CSubClassOne, CSubClassTwo, CSubClassThree 클래스
CFacade 클래스
실행부분
UML - class 다이어그램
참고
- 인터페이스 집합에 대해 하나의 인터페이스를 제공하는 패턴
- 복잡한 서브시스템에 대한 단순한 인터페이스 제공이 필요할 때
- 추상 개념에 대한 구현 클래스와 사용자 사이에 너무 많은 종속성이 존재할 때
- 서브시스템을 계층화시킬 때
- 클라이언트와 서브 시스템의 연결을 느슨하게 만듦
- 서브시스템에 접근하는 인터페이스를 제공
- 단순한 인터페이스로 복잡한 서브시스템을 감쌈
- 다른 구성요소에 대한 메소드 호출을 처리하기 위해 "래퍼"클래스를 많이 만들어야 할 수 있음
- 시스템이 더 복잡해지고, 개발시간도 늘어나면서 성능의 저하도 있을 수 있음
CExec 클래스
class CExec { public: CExec(string str) { m_str = str; }; void Print() { cout << m_str.c_str() << endl; } private: string m_str; };
CSubClassOne, CSubClassTwo, CSubClassThree 클래스
class CSubClassOne { public: void Exec() { auto_ptr<CExec> pExec(new CExec("Sub Class One")); pExec->Print(); }; };
class CSubClassTwo { public: void Exec() { auto_ptr<CExec> pExec(new CExec("Sub Class Two")); pExec->Print(); }; };class CSubClassThree { public: void Exec() { auto_ptr<CExec> pExec(new CExec("Sub Class Three")); pExec->Print(); }; };
CFacade 클래스
class CFacade { public: CFacade() { m_pSubClassOne = new CSubClassOne(); m_pSubClassTwo = new CSubClassTwo(); m_pSubClassThree = new CSubClassThree(); }; ~CFacade() { delete m_pSubClassOne; delete m_pSubClassTwo; delete m_pSubClassThree; }; void ExecOne() { m_pSubClassOne->Exec(); m_pSubClassTwo->Exec(); }; void ExecTwo() { m_pSubClassThree->Exec(); } private: CSubClassOne* m_pSubClassOne; CSubClassTwo* m_pSubClassTwo; CSubClassThree* m_pSubClassThree; };
실행부분
void main() { auto_ptr<CFacade> pFacade(new CFacade()); pFacade->ExecOne(); pFacade->ExecTwo(); }
UML - class 다이어그램
참고
- GoF의 디자인 패턴(개정판) 재사용성을 지닌 객체지향 소프트웨어의 핵심요소
- http://wooriworld2006.tistory.com/336
- http://blog.naver.com/ruly2001/70072957308
댓글 없음:
댓글 쓰기
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.