반응형

 

 

 

 

 

 

Template method 패턴 - 공통된 알고리즘 부분이 고정적일때 사용

 

기본 알고리즘 골격을 상위 클래스에서 갖도록 한다


 

 한글 ,오피스 ,엑셀등의 문서를 여는 함수의 모듈 Open() 은 비슷하다 거의 똑같다고 볼 수도 있는데

 

이런 공통과정을 클래스에게 맏기는 패턴

 

ABC 를 상위클래스 하나의 정의에 의하여 공유하고 , 각

하위 응용 프로그램마다(서브클래스마다) 파일을 여는 과정을 새로 정의 하는 것

 

전체적인 알고리즘은 공유하고 각 세부사항 구현은 따로 구현 하는 방식

 

전반적인 알고리즘 구조를 공유하는 모든 클래스의 부모 클래스에 정의 해놓고

 

이 부모 클래스에 동일한 알고리즘 을 둔다 그다음 서브 클래스의 세부 알고리즘은 Overriding 되어 구현 한다

 

 

 

부모 A 클래스에서 virtual void OpenDocument(); 함수가 정의 하여 모든 응용프로그램에 대한 문서를 여는 공통 알고리즘으로

 

부모 에 정의 해 놓고

 

만약 A 클래스내의 OpenDocument 안에서 이파일은 열 수 있는 문서라는 것이 확인 되어 진다면 해당 응용프로그램에 대해서

문서를 열도록 한다

 

처음 생성 클래스를 서브 클래스로 만들어 부모 A 클래스로 업캐스팅 한다음 실행을 OpenDocument 를 불러주면

부모에만 이 함수가 있음으로 부모의 OpenDocument 를 불렀다가 나머지 실제 여는 부분은

Overriding 되어 있음으로 서브 클래스의 함수로 호출 되는 구조가 된다

 

이때 OpenDocument 멤버 함수를 Template Method 라 한다

 

 


 

 

Template method 패턴은 - 공통된 부분이 고정적일때 사용

 

-알고리즘 중 변하지 않는 부분을 한번만 구현해 둔다음 변할 수 있는 부분을 하위 클래스에 의해 구현 되도록 할때 사용

 

-하위 클래스 확장을 제어하고 싶을때 Template Method 패턴을 사용 할 수 있다

 

 

 


 

 

대부분 자식이 불린후 자식에서 부모를 부르는 연산 순서를 취하는데

 

자식에서 부모함수명에 대한 부모클래스명:: 을 빼 먹는 경우 함수명이 수행함수명과 동일한 경우 엉뚱한 결과를 낳을 수 있는데

 

이런 위험을 없애려면 Template method 패턴을 경우 먼저 함수를 부를때 부모를 먼저 부른 후

 

부모에서 수행해야할 연산을 먼저 수행한 후 자식에 대한 HookOperation() => (이 함수는 자식에 overriding 된 함수) 함수를 수행하면

 

자식의  HookOperation() 이 불리는 순서가 역순인

 

Hock 연산을 사용 할 수 있다

 

 

 

 


 

 

Strategy 패턴은 객채를 변경 시켜가며 변경되는 패턴이고

 

Template Method 는 상속 관계를 이용해서 알고리즘의 일부분을 변경 시켜주는 것

 

그리고 Template Method 패턴은 Factory Method 패턴을 사용 할대가 종종 있다(자주)

 

이때 이 함수들은 굳이 public 으로 둘 필요는 없다( 클라이언트로부터 제어 하기 위한 구조)

 

Template method 에 의해 불려지는 함수(연산) 들은 protected 로 제어될 수 있지만

 

Template method 는 virtual 로 선언되어져서는 안된다!!

 


 

 

Template method 안에서 불리는 기본연산(함수) 를 최대한 적게 정의 해야 되는데

 

기본 연산이 많아 질수록 overriding 해야 할 함수들이 많아짐으로 구현이 지저분해진다

 

 


 

 

 

네트웍에서

 

Mke request

send request

new response

Process message

 

등이 있을때

 

HTTP, FTP, SMTP 등등 에서

 

등에서 위의 대략 4가지는 공통적이다

 

즉 구체적인 구현은 달리질 수 있지만 전체적인 과정은 동일 할 경우

 

 

상위  ClientComunication 클래스를 두고

 

하위 HTTP ,FPT ,SMT 클래스를 두어

 

세부적으로 위 4개의 함수를 Overriding 하여 세부적으로 구현

 

 

또한

send request

new response

 

에 대한 ABC 구조를 따로 만들어 추가 할 수도 있다

 

 

 

반응형

'디자인패턴과방법론 > 디자인패턴' 카테고리의 다른 글

adapter 패턴  (0) 2012.11.02
visitor 패턴  (0) 2012.11.02
strategy 패턴  (0) 2012.11.02
state 패턴  (0) 2012.11.02
Observer 패턴  (0) 2012.11.02

+ Recent posts