티스토리 뷰

Study/디자인 패턴

03 Template Method 패턴

Lkt_Programmer 2017. 9. 10. 03:29
반응형

Template Method Pattern


 

상위 클래스에서 처리의 흐름을 제어하며, 하위 클래스에서 처리의 내용을 구체화한다.여러 클래스에 공통되는 사항은 상위의 추상 클래스에서 구현하고, 공통 되지 않는 부분에 대한 상세 구현은 하위 클래스에서 구현한다.

 

 

예제


 

햄버거를 만드는 클래스를 설계 해보겠습니다.

햄버거 종류에는 치즈버거와 불고기버거가 있을 수 있습니다.

 

<불고기 버거>

 

1. 빵을 올린다.

2. 패티를 올린다.

3. 양상추를 올린다.

4. 빵을 올린다.

 

<치즈 버거>

 

1. 빵을 올린다.

2. 패티를 올린다.

3. 치즈를 올린다.

4. 빵을 올린다.

 

각 버거는 위에 나온 순서대로 만들어 집니다. 1, 2, 3번 같은 경우는 중복되는 내용입니다. 즉 1, 2, 3 번의 경우 상위 추상 메서드로 올려주고 3번 같은 경우에는 상위에서 추상 메서드로 정의하고 하위에서 세부 구현을 하도록 구조를 바꿔줍니다.

 

추가적으로 햄버거를 만드는 과정은 동일합니다. 즉 처리의 흐름이 동일하므로 상위 메서드에서 처리 흐름에 대한 메서드를 구현해주고 하위 메서드에서 공통적으로 사용 할 수 있도록 합니다.

 

 

소스코드


 

 
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
 
 
public abstract class Hamburger {
 
    public abstract void stack_ingredient();
 
    public void cook()
    {
        stack_bread();
        stack_patty();
        stack_ingredient();
        stack_bread();
 
    }
 
    public void stack_bread()
    {
        System.out.println("빵을 깔다");
    }
 
    public void stack_patty()
    {
        System.out.println("패티를 올리다");
    }
 
}

 상위로 오는 추상 클래스입니다.

cook() 메서드는 햄버거를 만드는 과정(처리흐름)에 대해 구현을 합니다.

그리고 각각 stack_bread(), stack_patty()와 같이 공통적으로 가지는 작업에 대해 구현을 해줍니다. stack_ingredient() 같은 경우는 각각의 햄버거에 대해서 다른 재료를 올리는 작업이므로 하위 클래스에서 상세 구현하도록 해줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
 
 
public abstract class Hamburger {
 
public class Cheese_Burger extends Hamburger{
 
    public void stack_ingredient()
    {
        System.out.println("치즈를 올리다");
    }
 
}

 

 

1
2
3
4
5
6
7
8
public class Bulgogi_Burger extends Hamburger {
 
    public void stack_ingredient()
    {
        System.out.println("양상추를 올리다");
    }
 
}

 

하위 클래스인 치즈버거와 불고기버거 클래스에서는 상위 클래스의 stack_ingredient() 메서드를 오버라이딩 해줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
public class Main {
    public static void main(String[] args)
    {
        Bulgogi_Burger burger1 = new Bulgogi_Burger();
        Cheese_Burger burger2 = new Cheese_Burger();
 
        burger1.cook();
        System.out.println("---------------");
        burger2.cook();
    }
 
 
}

 

Main에서 각각의 인스턴스를 생성 한 뒤 cook() 메서드를 호출합니다.

 

 

실행결과


 

 

 

 

반응형

'Study > 디자인 패턴' 카테고리의 다른 글

06 프록시 패턴 (Proxy Pattern)  (0) 2017.09.21
05 어댑터 패턴 (Adapter Pattern)  (0) 2017.09.16
04 Builder 패턴  (0) 2017.09.14
02 Singleton 패턴  (0) 2017.09.09
01 Strategy 패턴  (0) 2017.09.04