본문 바로가기

디자인 패턴/Java언어로 배우는 디자인패턴 입문 책 정리

Template Method 패턴

상위 클래스에서 로직의 흐름을 정의, 하위 클래스에서 흐름에 쓰이는 method를 구현하는 패턴


 

1. 코드

AbstractDisplay : 로직의 흐름을 기술한 상위 클래스

public abstract class AbstractDisplay {
	public abstract void open();
	public abstract void print();
	public abstract void close();
	
	public final void display() {
		open();
		for (int i = 0; i<5; i++) {
			print();
		}
		close();
	}
}

 

CharDisplay : <<a>> 출력을 위한 하위 클래스

public class CharDisplay extends AbstractDisplay {
	private char c;
	
	public CharDisplay(char c) {
		this.c = c;
	}

	@Override
	public void open() {
		System.out.print("<<");
	}

	@Override
	public void print() {
		System.out.print(c);
	}

	@Override
	public void close() {
		System.out.println(">>");
	}
}

 

StringDisplay : ***abcd*** 출력을 위한 하위 클래스

public class StringDisplay extends AbstractDisplay {
	private String str;
	
	public StringDisplay(String str) {
		this.str = str;
	}

	@Override
	public void open() {
		System.out.print("***");
	}

	@Override
	public void print() {
		System.out.print(str);
	}

	@Override
	public void close() {
		System.out.print("***");
	}
}

 

Main : test 클래스

public class Main {

	public static void main(String[] args) {
		AbstractDisplay a = new CharDisplay('A');
		a.display();
		
		AbstractDisplay b = new StringDisplay("Hello, word");
		b.display();
	}
}

2. 특징

- 실행 흐름에 쓰이는 method는 final로 선언하여 하위 클래스에서는 호출하지 못하도록 하기

- 로직의 흐름은 상위 클래스에만 있기 때문에 문제가 생겼을 경우 상위 클래스만 확인하면 된다.

 

3. 해당 패턴을 고려해볼만한 상황

- 실행의 흐름 로직은 동일하나 상황에 따라 결과가 달라지는 경우

'디자인 패턴 > Java언어로 배우는 디자인패턴 입문 책 정리' 카테고리의 다른 글

Prototpye 패턴  (0) 2021.01.03
Singleton 패턴  (0) 2021.01.01
Factory Method 패턴  (410) 2020.12.31
Adapter 패턴  (0) 2020.12.27
iterator 패턴  (0) 2020.12.27