Template Pattern이란?
▶ 알고리즘의 뼈대를 정의하고, 일부를 서브 클래스로 위임합니다. 템플릿 메소드는 알고리즘 구조를 변경하지 않고 알고리즘의 일부 내용을 서브 클래스에서 재정의하여 중복되는 코드를 줄이고 유지보수를 편리하게 할 수 있다. 


코드 요약

▶ CalculaotrTemplate 추상객체는 덧셈을 하는 연산을 가지고 있습니다. 연산 결과에 앞뒤로 꾸며주는 코드를 작성합니다. 이때 abstract decorate()를 사용하여 서브 클래스에서 계산을 마친 결과를 꾸며주고 return 합니다.


클래스 다이어그램

 

1. AddDotCalculator class

public class AddDotCalculator extends CalculatorTemplate{
    @Override
    public String decorate() {
        double num = getNum();
        StringBuilder sb= new StringBuilder();
        sb.append(".").append(num).append(".");
        return sb.toString();
    }
}

 

2. AddStarCalculator class

public class AddStarCalculator extends CalculatorTemplate{

    @Override
    public String decorate() {
        double num = getNum();
        StringBuilder sb= new StringBuilder();
        sb.append("*").append(num).append("*");
        return sb.toString();
    }
}

 

3. CalculatorTemplate abstract class

public abstract class CalculatorTemplate {

    private double num;

    public String execute(double n1, double n2){
        this.num=n1+n2;
        String decorate = decorate();
        return decorate;
    }

    public double getNum() {
        return num;
    }

    public abstract String decorate();
}

 

4. Main class

public class Main {
    public static void main(String[] args) {

        // . 을 추가하는 template
        CalculatorTemplate template1 = new AddDotCalculator();
        String result1 = template1.execute(1, 2);
        System.out.println(result1);


        // star 을 추가하는 template
        CalculatorTemplate template2 = new AddStarCalculator();
        String result2 = template2.execute(3, 4);
        System.out.println(result2);

    }
}

 

 

예시처럼 알고리즘들을 캡슐화 시키며, 중복되는 부분은 부모 클래스에 달라지는 부분은 서브클래스에 구현을 하는 것이 Template Pattern입니다. 읽어주셔서 감사합니다. 

 

전체 코드는 아래에서 확인 가능합니다:)

https://github.com/rlaehdals/design-pattern

 

GitHub - rlaehdals/design-pattern

Contribute to rlaehdals/design-pattern development by creating an account on GitHub.

github.com