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
반응형
'Design pattern > GoF(인강편)' 카테고리의 다른 글
[Design Pattern] Prototype Pattern (0) | 2021.11.24 |
---|---|
[Design Pattern] Singleton Pattern (0) | 2021.11.24 |
[Design Pattern] Factory Method Pattern (0) | 2021.11.24 |
[Design Pattern] Adapter Pattern (0) | 2021.10.28 |
[Design Pattern] Strategy Pattern (0) | 2021.10.28 |
댓글