Free Lines Arrow
본문 바로가기
Design pattern/GoF(인강편)

[Design Pattern] Template Method Pattern

by skahn1215 2021. 11. 10.
728x90
반응형

Template Method Pattern

  •  동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다.
  •  알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 다시 정의할 수 있게 해준다

 

 

Template Method Pattern 구조

  • 추상클래스로 템플릿 클래스를 만든다.
  • templateMethod 안에는 method1 과 method2 를 수행하도록 한다.
  • 구현부 즉 Contrete Class 에서 method1, metdod2 만 구현한다.

 

 

 

Template Method Pattern 예제 구조

  • CoffeMaker 를 추상클래스로 만든다.
  • makeCoffee 함수에는 수행할 알고리즘을 넣는다.
  • 구현부에서 boil, selectBeanm selectCream, selectIce 만 구현한다.
  • 어차피 makeCoffee 함수를 호출하면 구현부에 호출된 메소드들을 사용하기 때문이다.

 

 

구현

CoffeeMaker class

package patterns.templatemethod;

public abstract class CoffeeMaker {
    protected abstract int boil(String type);
    protected abstract String selectBean(String beanType);
    protected abstract String selectCream(String creamType);
    protected abstract boolean selectIce(boolean isIce);

    // template method
    public void makeCoffee(String type, String beanType, String creamType, boolean isIce) {
        boil(type);
        selectBean(beanType);
        selectCream(creamType);
        selectIce(isIce);
    };
}

 

DefalutCoffeeMaker Class

package patterns.templatemethod;


public class DefaultCoffeeMaker extends CoffeeMaker{
    @Override
    protected int boil(String type) {
        int temperature = 100;
        System.out.println("온도: "+ temperature);
        System.out.println(type + "끓이는중");
        return temperature;
    }

    @Override
    protected String selectBean(String beanType) {
        System.out.println("선택된 원두: " + beanType);
        return beanType;
    }

    @Override
    protected String selectCream(String creamType) {
        System.out.println("선택된 크림: " + creamType);
        return creamType;
    }

    @Override
    protected boolean selectIce(boolean isIce) {
        if (isIce == true) {
            System.out.println("아이스 커피.");
        } else {
            System.out.println("따듯한 커피.");
        }
        return false;
    }
}

 

 

TestCode

package patterns.templatemethod;

public class Main {
    public static void main(String[] args) {
        CoffeeMaker coffeeMaker = new DefaultCoffeeMaker();
        coffeeMaker.makeCoffee("물","에티오피아"," 없음",true);
    }
}

 

결과

온도: 100
물끓이는중
선택된 원두: 에티오피아
선택된 크림:  없음
아이스 커피.

 

728x90
반응형

댓글