2014-02-25 2 views
2

내가 아는 바로는 템플릿 메서드는 자식 클래스에 정의 된 가상 또는 추상 메서드를 호출하는 일반적인 메서드입니다. 내가 맞습니까? 아니면 내가 놓친이 패턴에 대해 중요한 다른 것이 있습니까?템플릿 패턴 패턴 이해

abstract class Foo { 
    public void IamTemplateMethod() { // which will be called in child class object 
    method1(); // because this... 
    method2(); // ...or this method was called in me 
    } 
    public virtual void method1() { ... } // to be overriden in child class 
    public abstract void method2() { ... } // to be defined in child class 
} 

제가 맞다면 템플릿 방법을 구현하는 다른 일반적인 방법이 있습니까?

답변

6

예. 대부분의 패턴은 특별한 것은 아니지만 특정 상황에 잘 맞는 것처럼 보이는 똑똑한 접근법이지만 일반적인 OO 원칙 (상속, 다형성, 추상화 등)을 여전히 사용합니다.

템플릿 방법은 때로는 일부 하위 클래스 특정 로직이 인터리브 된 상태로 일반적인 로직을 수행해야한다고 말합니다. 따라서 각 하위 클래스에 남기고 싶은 특정 논리는 구체적인 비즈니스 클래스가 구현할 수있는 추상/가상 메서드로 정의되며 일반적인 비즈니스 로직은이를 수행합니다.

공용 논리를 재정의하지 않으려면 (예 : Java에서 final 키워드로) 템플릿 메서드를 재정의하지 않도록 표시 할 수 있으므로 원하는 공통 코드가 하위 클래스가 원하는 비트를 무시하도록 허용하면서 항상 실행되는 항상 실행됩니다.

문서 템플릿과 같습니다. 표제, 꼬리말 및 공통 요소는 고정되어 있으며 항상 동일하며 특정 문서가 사용되는 구체적인 세부 사항이 중간에 공백을 채 웁니다.

+0

아 들여다 - 마지막으로 나는'final' 키워드, 감사를 사용하는 이유를 이해 : 그리고 참조로 만들 수 있습니다! :-) –

+0

차갑게 :). 클래스를 사용하여 (다른 누구도 재정의 할 수 없도록) 변수를 사용할 수 있습니다 (이 값을 초기화하면 값이 변경되지 않고 변경되지 않습니다) – jbx

2

템플릿 패턴은 해당 메소드의 모든 하위 항목에 대한 공통 순서를 제공합니다. 따라서 Template Pattern은 실행 순서를 알려주는 최종 메소드를 정의합니다.

abstract class Foo { 
    public void final initilialize(){ 
     method1(); 
     method2(); 
     method3(); 
    } 
    public void method1(){...} 
    public void method2(){...} 
    public void method3(){...} 
} 

이제 하위 클래스가 Foo 클래스를 확장 할 수 있습니다. 자세한 내용은

Foo obj1=new child(); 

http://www.tutorialspoint.com/design_pattern/template_pattern.htm

+0

이 메서드는 여전히 템플릿 메서드 패턴입니까? method1() - method3()은 가상 또는 추상적이지 않으므로 initialize()를 호출해도 해당 메서드가 자식 클래스에서 호출되지 않습니까? –

+0

아, 알겠습니다. 모든 메소드를 재정의 할 수있는 Java 구문. –

+0

yups .. 그래서 java에서 지정된 순서로 실행될 메소드를 실행할 수 있습니다. – Prateek