분류 전체보기 (199)
ººº::Development™:: (66)
ººº::Learning™:: (31)
ººº::Information™:: (37)
ººº::Note™:: (11)
ººº::Photo™:: (50)
ººº::zEtc™:: (3)
rss

믹시
tistory 티스토리 가입하기!
'탬플릿 메소드 패턴'에 해당되는 글 1건
2008. 11. 27. 22:21
추상 메소드를 구현하는 것은 하위 클래스이다. 하위 클래스 측에서 메소드를 구현하면 구체적인 처리가 결정된다. 서로 다른 하위 클래스가 서로 다른 구현을 실행하면 서로 다른 처리가 실행될 것입니다. 그러나 하위 클래스에서 어떤 구현을 하더라고 처리의 흐름은 상위 클래스에서 결정한대로 이루어진다.
위와 같이 상위 클래스에서 모든 처리의 흐름을 정의하고, 하위 클래스에서 그 구체적인 내용을 결정하는 패턴이 Template Method 패던이다.

1. 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();
    }
}

2. CharDisplay.java
public class CharDisplay extends AbstractDisplay {
    private    char    ch;
    public CharDisplay( char ch ) { this.ch = ch; }   

    public void close() { System.out.println( ">>" ); }
    public void open() { System.out.print( "<<" ); }   
    public void print() { System.out.print( ch ); }   
}

3. 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 close() { printLine(); }
    public void open() { printLine(); }
    public void print() { System.out.println( "|" + string + "|" ); }
    private void printLine() {
        System.out.print( "+" );
        for( int i = 0; i < width; i++ ) {
            System.out.print( "-" );
        } System.out.println( "+" );
    }
}

4. 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();
    }
}

어떻게 위의 코드를 보고 금방 이해가 되나여? 저같은 경우에는 앞의 내용들과 크게 다를것은 몬 느끼겠지만 조금씩 다른게 있다는 느낌이 받고 있다.

Template Method패턴을 사용하면 구체적인 알고리즘은 상위 클래스에서 정의대어 있고, 하위 클래스에서는 해당하는 method를 실제로 구현하는 역할을 수행하는 패턴이라고 이해하면 될 것 같다.

:: 그럼 일 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복하기를 ^^* ::



prev"" #1 next