티스토리 뷰

Design Pattern

Template method패턴

란텔 2014. 9. 25. 20:21

Templeate method패턴은 추상메서드를 사용한 패턴으로써 


메소드의 실행 알고리즘은 추상클래스에서 담당하고, 이 추상클래스를 상속받는 클래스는 추상클래스의 추상메서드를 구현하는 패턴입니다.



이 패턴을 사용함으로써 생기는 이점은 알고리즘의 변경사항이 생길 때, 각각의 클래스에 대한 변경을 추상클래스 하나의 변경으로 축소함으로써 일일이 변경해야되는 막가파식 코딩을 막을 수 있습니다.




//템플레이트 메소드 패턴 
abstract class LotteWorld{ 
    int token; 
     
    abstract int 표내기(); 
    abstract void 타기(); 
     
    protected void 체험(){ 
        int currentToken = 표내기(); 
        //System.out.println(currentToken); 
         
        if(currentToken <= 0) { 
            System.out.println("입장권이 없습니다."); 
            return; 
        } 
        타기(); 
        System.out.println("입장권이"+currentToken+"남았습니다."); 
    } 
     
} 


class 청룡열차 extends LotteWorld{ 
     
     
    청룡열차(int token){ 
        this.token=token; 
        System.out.println("청룡열차 입장권을"+token+"끊었습니다"); 
    } 
     
    int 표내기(){ 
        return this.token--; 
    } 
    void 타기(){ 
        System.out.println("청룡열차를 탔습니다."); 
    }; 
     
     
} 

class 회전목마 extends LotteWorld{ 
     
    회전목마(int token){ 
        this.token=token; 
        System.out.println("회전목마 입장권을"+token+"끊었습니다"); 
    } 
     
    int 표내기(){ 
        return this.token--; 
    } 
    void 타기(){ 
        System.out.println("회전목마를 탔습니다."); 
    } 
} 


public class TemplePattern { 
        public static void main(String[] args){ 
             
            LotteWorld l = new 회전목마(2); 
            l.체험(); 
            l.체험(); 
            LotteWorld l1 = new 청룡열차(1); 
            l1.체험(); 
            l1.체험(); 
        } 
} 

놀이기구를 체험하기위해 실행되어야 할 행동을 입장표내기와 타기로 나누었습니다.


청룡열차와 회전목마는 롯데월드에 포함되어 있지만 서로 다른 놀이기구입니다. 표도 다르고, 무서움도 다르고, 탈수있는 신장제한 등등이 있겠죠.


template패턴을 기반으로 표를 깍아내리는 표내기()와 놀이기구를 탄다는 행동을 표현하는 타기() 는 상속받는 클래스에서 구현하도록 추상메서드로 정의하였습니다.


놀이기구를 체험하기위해서는 표를 확인하고 타야겠죠(이런 일련의 상황은 결국 어느 놀이기구나 같기 때문에 부모클래스의 메서드에서 처리방식을 표현하였습니다.)


Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday