템플릿 메소드 패턴은 알고리즘의 구조를 메서드에 정의하고, 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴이다. 알고리즘이 단계별로 나누어 지거나, 같은 역할을 하는 메서드이지만 여러곳에서 다른 형태로 사용이 필요한 경우 유용하다.
장점
1. 코드 중복을 줄일 수 있다.
2. 자식 클래스의 역할을 줄여 핵심 로직 관리가 용이하다.
단점
1. 추상 메서드가 많아지면 클래스 관리가 복잡해 진다.
2. 클래스 간의 관계와 코드가 꼬일 수 있다.
예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
abstract class Work {
private String personName;
public Work(String personName) {
this.personName = personName;
}
protected String getPersonName() {
return personName;
}
private void finishWork() {
System.out.println("퇴근");
}
public void work() {
startWork();
finishWork();
}
abstract protected void startWork();
}
class Painter extends Work {
public Painter(String name) {
super(name);
}
@Override
protected void startWork() {
System.out.println(getPersonName() + "은 그림을 그린다.");
}
}
class Singer extends Work {
public Singer(String name) {
super(name);
}
@Override
protected void startWork() {
System.out.println(getPersonName() + "은 노래를 부른다.");
}
}
|
cs |