티스토리 뷰
Template Method Pattern
1. 개요
base class(추상클래스)에서 메소드 실행 순서를 Template Method 에서 정의하며, 실제 동작하는 알고리즘은 구현클래스에서 정의하도록 클래스를 설계하는 것.
2. 클래스 다이어그램
AbstractClass
tempateMethod 를 가지고 있는 기본 클래스. 프로그램의 큰맥락의 알고리즘이 정의 되어 있으며 구체적인 실행은 하위 클래스에 맡긴다.ConcreteClass
Abstract Class 를 구현하는 클래스, 추상메소드들을 구현하며 프로그램 흐름과 고려하지 않아도 되면 각 메소드내의 알고리즘만 구현해주면 된다.
3. Java로 구현한 패턴
3.1 클래스 다이어 그램
3.2 소스
[CommonBatchTemplate.java]
package TemplateMethod; abstract public class CommonBatchTemplate { /** * 공통적인 비지니스 로직이 포함되는 Template Method. */ public void executeBathcJob() { this.setConfig(); this.connectDb(); this.printInfo(); this.runTask(); this.printResult(); this.closeDb(); } /** * 서브클래스에서 구현해야할 추상메소드 */ abstract protected void printInfo(); abstract protected void runTask(); abstract protected void printResult(); /** * 환경설정 파일 로드. DB정보, logfile정보 등 */ private void setConfig() { System.out.println(" called setConfig() "); } /** * Jdbc Connect 작업 */ private void connectDb() { System.out.println(" called connectDb() "); } /** * Jdbc close */ private void closeDb() { System.out.println(" called closeDb() "); } }
[SimpleBatch.java]
package TemplateMethod; public class SimpleBatch extends CommonBatchTemplate { @Override protected void printInfo() { // TODO Auto-generated method stub System.out.println("=== Simple Batch Start! ==="); } @Override protected void runTask() { // TODO Auto-generated method stub /** * 실제 작업에 해당하는 내용을 구현 */ for( int i=0; i<10; ++i ) System.out.println( i ); } @Override protected void printResult() { // TODO Auto-generated method stub System.out.println("=== Simple Batch End! ==="); } public static void main(String[] args) { // 추상클래스의 Template Method 를 호출해준다. new SimpleBatch().executeBathcJob(); } }
4. 활용범위
- 다양하게 변할수 있는 부분을 subclass로 내리고 공통적인 부분을 추상클래스에 정의한다.
- 코드를 리펙토링 할때 공통적인 알고리즘을 Template Method 및 추상클래스로 모아서 코드의 중복을 줄인다.
5. 마치며
Template Method 패턴을 이용하면 공통적으로 사용되는 코드를 상당부분 줄일 수 있다. 공통라이브러리를 만드는 팀에 있다면 꼭 고려해보도록 하자!
반응형
'Design Pattern' 카테고리의 다른 글
디자인패턴 한줄 정리 (0) | 2014.03.31 |
---|---|
디자인패턴 4) Prototype Pattern (0) | 2014.03.27 |
디자인 패턴 3) Builder Pattern (5) | 2014.03.03 |
디자인패턴 2) Proxy Pattern (0) | 2014.02.10 |
디자인패턴 1) Singleton 패턴 (3) | 2014.02.03 |
댓글