[Design Pattern] template method pattern
template method pattern 이란??
템플릿 메서드 패턴은
추상 클래스와 구현 클래스로 작성할 수 있으며
메인이 되는 로직 부분은 추상 클래스의 일반 메서드로 선언해서 사용됩니다.
즉 구현 별로 달라질 수 있는 행동(메서드)들은 구현 클래스에서 선언 후 호출하는 방식으로 사용합니다.
아래와 같은 장단점이 있습니다.
장점
- 코드 중복 감소
- 자식 클래스의 역할을 감소시키면서 핵심 로직 관리 용이
- 객체 추가 및 확장 쉽게 가능
단점
- 추상 메서드가 너무 많아지면 클래스 관리 복잡
- 추상 클래스와 구현 클래스 간 복잡성 증대
예 알아보기
1. Template
public abstract class HouseTemplate {
public final void buildHouse() {
buildFoundation();
buildPillars();
buildWalls();
buildWindows();
System.out.println("House is built");
}
private void buildWindows() {
System.out.println("Building Glass Windows");
}
public abstract void buildWalls();
public abstract void buildPillars();
private void buildFoundation(){
System.out.println("Building foundation with cement,iron rods and sand");
}
}
2. concrete class
public class GlassHouse extends HouseTemplate {
@Override
public void buildWalls() {
System.out.println("Building Glass Walls");
}
@Override
public void buildPillars() {
System.out.println("Building Pillars with glass coating");
}
}
public class WoodenHouse extends HouseTemplate {
@Override
public void buildWalls() {
System.out.println("Building Wooden Walls");
}
@Override
public void buildPillars() {
System.out.println("Building Pillars with Wood coating");
}
}
3. House Client
public class HousingClient {
public static void main(String[] args) {
HouseTemplate houseType = new WoodenHouse();
houseType.buildHouse();
System.out.println();
System.out.println("***********");
System.out.println();
houseType = new GlassHouse();
houseType.buildHouse();
}
}
소스코드의 중복을 줄이기 위해 하위 클래스에서 빈번하고 공통적으로 나타나는 부분에 대해서 별도의
추상 클래스를 정의해서 사용하는 것이 핵심입니다.
즉, 클래스 라이브러리 작성 시 공통된 부분을 추출하는 부분에서 이점을 제공하고 이를 통해서 확장을
쉽게 가능하게 해주는 패턴이라고 볼 수 있습니다.
상위 클래스(여기선 추상 클래스)에게 공통적인 로직은 템플릿 메서드를 두고,
구체 클래스 스타일에 맞게 구현을 강제하기 위해 추상 메서드를 사용하고, Hook메서드(일반 메서드)를
두는 패턴을 템플릿 메서드 패턴(Template Method Pattern)이라고 합니다.
'DesignPattern' 카테고리의 다른 글
[Design Pattern] Prototype pattern (2) | 2019.09.27 |
---|---|
factory method pattern vs abstract factory pattern 차이 알아보기 (6) | 2019.09.18 |
[Design Pattern] Factory Method Pattern (4) | 2019.09.18 |
[Design Pattern] abstract factory pattern (5) | 2019.09.17 |
[Design Pattern] Builder Pattern (4) | 2019.09.15 |
댓글