[Design Pattern] Template Method 패턴
가정에서 요리할 때 필요한 모양틀이 있다. 별모양으로 된 이 틀은 밀가루 반죽을 넣으면 별 모양으로 된 쿠키가 된다. 또한 계란물을 넣으면 별모양 후라이가 되기도 한다. 프로그램을 할 때도 제공된 틀 클래스를 상속 받으면 상속 받은 클래스는 어떠한 것을 구현해도 호출 하는 쪽에서는 수정에 대한 영향도가 없이 다양한 결과를 만들어 낼 수 있다. 이것을 Template Method 패턴이라고 한다.
템플릿 메소드 패턴
가정에서 요리할 때 필요한 틀을 직접 프로그램 해보겠다.
아래 클래스 다이어그램을 보면 AbstractCookShape고정된 요리틀 추상 클래스가 있다. 이것을 상속 받은 CookieShape, EggShape은 틀의 모양을 갖은 쿠키와 계란후라이를 만들어 내는 역할을 한다.
[클래스 다이어그램]
[AbstractCookShape 구현]
재료를 넣고, 요리를 시작, 끝내는 3가지 함수가 있다.
이 틀에만 맞춰서 구현하면 많은 요리기능을 갖은 클래스를 만들어 낼 수 있다.
public abstract class AbstractCookShape { public abstract void pourMaterial(String material); public abstract void startCook(); public abstract void endCook(); } |
[CookieShape 구현]
AbstractCookShape을 상속 받아서 쿠키를 요리하는 클래스를 만든다.
public class CookieShape extends AbstractCookShape { String material = "";
@Override public void pourMaterial(String material) { this.material = material; } @Override public void startCook() { System.out.println("별모양 "+material+"쿠키를 요리 합니다."); } @Override public void endCook() { System.out.println("별모양 "+material+"쿠키가 완료되었습니다."); } } |
[EggShape 구현]
AbstractCookShape을 상속 받아서 계란후라이를 요리하는 클래스를 만든다.
public class EggShape extends AbstractCookShape { String material = "";
@Override public void pourMaterial(String material) { this.material = material; } @Override public void startCook() { System.out.println("별모양 "+material+"후라이를 요리 합니다."); } @Override public void endCook() { System.out.println("별모양 "+material+"후라이가 완료되었습니다."); } } |
[Main 구현]
만들어놓은 요리틀을 사용해보자.
public class Main { public static void main(String[] args) { AbstractCookShape eggShape = new EggShape(); AbstractCookShape cookieShape = new CookieShape();
eggShape.pourMaterial("계란"); eggShape.startCook(); eggShape.endCook();
cookieShape.pourMaterial("밀가루반죽"); cookieShape.startCook(); cookieShape.endCook(); } } |
'프로그램 > Design Pattern' 카테고리의 다른 글
[디자인패턴] 싱글톤(Singleton) 패턴 (0) | 2018.06.04 |
---|---|
[디자인패턴] Factory Method 패턴 (0) | 2018.06.03 |
[디자인패턴] Adapter 패턴 (0) | 2018.06.01 |
[디자인패턴] Iterator (0) | 2018.05.22 |