Chapter 03 Template Method 하위 클래스에서 구체적으로 처리하기 - brodieroy/Study GitHub Wiki

1. 무작정 소스를 다운받아서 봅시다. Sample가 있더군요.

2. Sample을 봅시다.

AbstractDisplay.java

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.java

public class CharDisplay extends AbstractDisplay {  
    private char ch;                                
    public CharDisplay(char ch) {                   
        this.ch = ch;                               
    }
    public void open() {                            
        System.out.print("<<");                     
    }
    public void print() {                           
        System.out.print(ch);                       
    }
    public void close() {                           
        System.out.println(">>");                   
    }
}

StringDisplay.java

public class StringDisplay extends AbstractDisplay {    
    private String string;                              
    private int width;                                  
    public StringDisplay(String string) {               
        this.string = string;                           
        this.width = string.getBytes().length;          
    }
    public void open() {                                
        printLine();                                    
    }
    public void print() {                               
        System.out.println("|" + string + "|");             }
    public void close() {                               
        printLine();                                    
    }
    private void printLine() {                          
        System.out.print("+");                          
        for (int i = 0; i < width; i++) {               
            System.out.print("-");                      
        }
        System.out.println("+");                        
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        AbstractDisplay d1 = new CharDisplay('H');                  
        AbstractDisplay d2 = new StringDisplay("Hello, world.");    
        AbstractDisplay d3 = new StringDisplay("안녕하세요");     
        d1.display();                                            
        d2.display();
        d3.display();                                            
    }
}

쉬운설명 : 템플릿이란 글자모양이 뚫려있는 판을 말함, 펜으로 쓰면 펜으로 쓴 글자가 되며, 연필로 쓰면 연필로 쓴 문자가된다. 하지만 무엇으로 쓰던 그 모양은 같다.

UML설명 03_TempleteMEthod pattern

그림 설명 : 위그림에서 중요한 사항은 추상메소드가 어떻게 호출되는지를 알수있지만, 어떤 처리가 수행되는지느 알수없습니다.

어려운설명 : 상위 클래스에서 처리 뼈대를 결정하고, 하위 클래스에서 그 구체적인 내용을 결정하는 디자인 패턴을 Template Method 패턴 이라고 부릅니다.