티스토리 뷰
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