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