2016년 1월 9일 토요일

Template Method Pattern (템플릿 메서드 패턴)

의도
  • 알고리즘의 뼈대만을 정의하고 각 단계에서 수행할 구체적 처리는 서브클래스 쪽에서 하는 패턴
이럴 때 사용하자.
  • 어떤 한 알고리즘을 이루는 부분 중 변하지 않는 부분을 한번 정의해 놓고 다양해질 수 있는 부분은 서브 클래스에서 정의할 수 있도록 남겨두고자 할때
  • 서브클래스 사이의 공통적인 행동을 추출하여 하나의 공통 클래스에 몰아둠으로써 코드 중복을 피하고 싶을때
코드
AbstractClass클래스
class AbstractClass
{
public:
   virtual void Operation1() = 0;
   virtual void Operation2() = 0;

   /* template method */
   void Operation3() {
      cout << "Operation3" << endl;
   };
};

ConcreteClass클래스
class ConcreteClass : public AbstractClass
{
public:
   void Operation1() {
      cout << "Operation1" << endl;
   };
   void Operation2() {
      cout << "Operation2" << endl;
   };
};

실행부분
void main()
{
   AbstractClass* pClass = new ConcreteClass();

   pClass->Operation1();
   pClass->Operation2();
   pClass->Operation3();

   delete pClass;
}

UML - class 다이어그램
참고
  • GoF의 디자인 패턴(개정판) 재사용성을 지닌 객체지향 소프트웨어의 핵심요소
  • http://psh85a.tistory.com/57

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.