Template Pattern

wangjh789·2022년 8월 31일
0

Design Pattern

목록 보기
9/13

애플리케이션에 서로 비슷한 프로시져가 있다면 상속을 통해 특정한 개별화된 단계를 재정의하는 게 좋다.

전략 패턴과 비슷하지만 템플릿 패턴은 상속(정적)을 이용하고, 전략패턴은 구성(동적)을 이용한다.
상속은 클래스 수준에서 정의되고, 구성은 객체 수준에서 정의됨

숫자를 정렬하는 방법 추상화해 템플릿 패턴을 사용해 다른 알고리즘을 동적으로 바뀌게 끔 구현했다.

public abstract class Algorithm {

    protected int[] nums;

    public Algorithm(int[] nums) {
        this.nums = nums;
    }

    protected abstract void initialize();

    protected abstract void sorting();

    protected abstract void showResult();

    protected void swap(int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }

    // template Pattern
    public final void sort() {
        initialize();
        sorting();
        showResult();
    }
}

public class BubbleSort extends Algorithm {

    public BubbleSort(int[] nums) {
        super(nums);
    }

    @Override
    protected void initialize() {
        System.out.println("Initializing the bubble sort");
    }

    @Override
    protected void sorting() {
        Arrays.sort(this.nums);
    }

    @Override
    protected void showResult() {
        System.out.println(Arrays.toString(nums));
    }
}

여기서 핵심은 sort() 메스드로 자손 클래스에서 재정의된 메서드를 사용하고 있다는 점이다.
(final로 재정의를 못하게끔 막음)

profile
기록

0개의 댓글

Powered by GraphCDN, the GraphQL CDN