2018-4-25 디자인패턴(3)

템플릿메소드패턴

package DesignPattern;

public abstract class Animal {
    // 템플릿 메서드
    public void playWithOwner() {
        System.out.println("귀염둥이 이리온...");
        play();
        runSomething();
        System.out.println("잘했어");
    }

    // 추상메서드
    abstract void play();

    // Hook(갈고리)메서드
    void runSomething() {
        System.out.println("꼬리 살랑 살랑~");
    }
}

class Dog extends Animal {
    @Override
    void play() {
        System.out.println("멍! 멍");
    }

    @Override
    void runSomething() {
        System.out.println("멍! 멍! 꼬리 살랑 살랑~");
    }
}

class Cat extends Animal {
    @Override
    void play() {
        System.out.println("야옹~ 야옹");
    }

    @Override
    void runSomething() {
        System.out.println("야옹~ 야옹~ 꼬리 살랑 살랑~");
    }
}

class Driver {
    public static void main(String[] args) {
        Animal bolt = new Dog();
        Animal kitty = new Cat();

        bolt.playWithOwner();

        System.out.println();
        System.out.println();

        kitty.playWithOwner();
    }
}
//result
귀염둥이 이리온...
멍! 멍
멍! 멍! 꼬리 살랑 살랑~
잘했어


귀염둥이 이리온...
야옹~ 야옹
야옹~ 야옹~ 꼬리 살랑 살랑~
잘했어
  • 상위 클래스인 Animal에 템플릿을 제공하는 playWithOwnver() 메서드와 하위클래스에게 구현을 강제하는 play() 추상 메서드, 하위클래스가 선택적으로 오버라이딩할 수 있는 runSomething메서드가 있다.
  • 하위클래스인 Dog와 Cat은 상위클래스인 Animal에서 구현을 강제하고있는 play() 추상메서드를 반드시 구현해야한다.

상위 클래스에 공통 로직을 수행하는 템플릿메서드와 하위클래스에 오버라이딩을 강제하는 추상메서드 또는 선택적으로 오버라이딩할 수 있는 훅(Hook)메서드를 두는 패턴을 템플릿 메서드 패턴이라고 한다.

상위 클래스의 결본 메서드에서 하위 클래스가 오버라이딩한 패턴을 호출하는 패턴

Written on April 25, 2018