정의
알고리즘의 구조를 메소드에 정의하고, 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴이다. 알고리즘이 단계별로 나누어 지거나, 같은 역할을 하는 메소드이지만 여러곳에서 다른형태로 사용이 필요한 경우 유용한 패턴이다.

abstractClass : 부모 클래스에는 전반 과정을 수행하는 메인 메소드가 있다. 세부 메소드를 추상메소드로 갖는다.
concreteClass : 자식클래스는 부모의 추상메소드를 상속받아 오버라이딩 구현한다.
예시)
전통약과를 만드는 과정은 3개의 과정을 순차적으로 진행하여야 한다.
1. 반죽을 만드는 과정
2. 반죽을 기름에 튀겨내는 과정
3. 시럽을 바르는 즙청 과정
이 세개의 과정을 어떻게 하느냐에 따라 다양한 약과를 만들 수 있다.
=> 부모 메소드가 갖는 메인 메소드의 순서를 자식들이 바꿀 순 없지만 세부 메소드를 어떻게 구현하느냐에 따라
순서는 갖지만 다르게 동작한다.
전 편에선 이 방식들을 각각 갈아끼워 넣을 수 있는 전략패턴이 사용
다른점은 다양화된 방식을 각각 자식 클래스들에서 오버라이딩 함.


//abstractClass
public abstract class MapView {
protected abstract void connectMapServer();
protected abstract void showMapOnScreen();
protected abstract void moveToCurrentLocation();
public void initMap() {
connectMapServer();
showMapOnScreen();
moveToCurrentLocation();
}
}
부모 추상클래스
public class NaverMapView extends MapView{
@Override
protected void connectMapServer() {
System.out.println("네이버 지도 서버에 연결");
}
@Override
protected void showMapOnScreen() {
System.out.println("네이버 지도를 보여줌");
}
@Override
protected void moveToCurrentLocation() {
System.out.println("네이버 지도에서 현 위로 이동");
}
}
public class KakaoMapView extends MapView{
@Override
protected void connectMapServer() {
System.out.println("카카오 지도 서버에 연결");
}
@Override
protected void showMapOnScreen() {
System.out.println("카카오 지도를 보여줌");
}
@Override
protected void moveToCurrentLocation() {
System.out.println("카카오 지도에서 현 위로 이동");
}
}
부모의 추상메소드를 구현한 자식클래스
public class TemplateMethodExample {
public static void main(String[] args) {
new NaverMapView().initMap();
new KakaoMapView().initMap();
}
}
네이버맵과 카카오맵은 고통의 과정을 가지고 있지만 그 안의 세부 과정을 다르게 구현하였다.
'디자인패턴' 카테고리의 다른 글
[디자인 패턴] 옵져버 패턴(Observer Pattern) (0) | 2021.07.20 |
---|---|
[디자인패턴] 어댑터 패턴(Adaptor Parttern) (0) | 2021.07.20 |
[디자인패턴] 데코레이터 패턴(Decorator Pattern) (0) | 2021.07.19 |
[디자인패턴] 퍼사드 패턴(Facade Pattern) (0) | 2021.07.19 |
[디자인패턴] 전략 패턴(Strategy Pattern) (0) | 2021.07.15 |