<aside> 📚 ◾️ 코드는 책 p.384 ~ 387 참고 ◾️ 실제 Google Guava EventBus 소스 코드를 한번 직접 읽어보는 것을 추천
</aside>
EventBus
프레임워크
EventBus
클래스
AsyncEventBus
클래스
템플릿 메서드
내부에 이러한 메서드들을 호출하는 방식으로 구현하는 것.abstract class AbstractTemplate {
// < 재사용 효과 >
// 템플릿 메소드 : 메서드 앞에 final 키워드를 붙이면 자식 클래스에서 오버라이딩이 불가능함
// 자식 클래스에서 상위 템플릿을 오버라이딩해서 자기마음대로 바꾸도록 하는 행위를 원천 봉쇄
public final void templateMethod() {
// 상속하여 구현되면 실행될 메소드들
step1();
step2();
if(hook()) { ... } // 안의 로직을 실행하거나 실행하지 않음
step3();
}
// 상속하여 사용할 것이기 때문에 protected 접근제어자 설정
protected abstract void step1();
protected abstract void step2();
protected abstract void step3();
// < 확장 효과 >
// 필요한 경우 @Override 하여 사용
boolean hook() { return true; }
}
class ImplementationA extends AbstractTemplate {
@Override
protected void step1() {}
@Override
protected void step2() {}
@Override
protected void step3() {}
}
class ImplementationB extends AbstractTemplate
@Override
protected void step1() {}
@Override
protected void step2() {}
@Override
protected void step3() {}
// hook 메소드를 오버라이드 해서 false 를 return 하도록 함
// 템플릿에서 if 문이 실행되지 않게 된다
@Override
protected boolean hook() {
return false;
}
}
...
class Client {
public static void main(String[] args) {
AbstractTemplate templateA = new ImplementationA(); // 1. 템플릿 메서드가 실행할 구현화한 하위 알고리즘 클래스 생성
templateA.templateMethod(); // 2. 템플릿 실행
}
}