'탬플릿 메소드 패턴'에 해당되는 글 1건
2008. 11. 27. 22:21
추상 메소드를 구현하는 것은 하위 클래스이다. 하위 클래스 측에서 메소드를 구현하면 구체적인 처리가 결정된다. 서로 다른 하위 클래스가 서로 다른 구현을 실행하면 서로 다른 처리가 실행될 것입니다. 그러나 하위 클래스에서 어떤 구현을 하더라고 처리의 흐름은 상위 클래스에서 결정한대로 이루어진다.
위와 같이 상위 클래스에서 모든 처리의 흐름을 정의하고, 하위 클래스에서 그 구체적인 내용을 결정하는 패턴이 Template Method 패던이다.
위와 같이 상위 클래스에서 모든 처리의 흐름을 정의하고, 하위 클래스에서 그 구체적인 내용을 결정하는 패턴이 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();
}
}
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 ); }
}
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( "+" );
}
}
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();
}
}
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를 실제로 구현하는 역할을 수행하는 패턴이라고 이해하면 될 것 같다.
:: 그럼 일 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복하기를 ^^* ::
'ººº::Development™:: > ::zEtc™::' 카테고리의 다른 글
[Pattren] Adapter 패턴 - Java (0) | 2008.11.27 |
---|---|
[Pattren] Iterator 패턴 - Java (0) | 2008.11.21 |
[Erlang] 초간단 순차 프로그램 (1) | 2008.10.06 |
[Erlang] Eclipse에서 얼랭(Erlang)하기 (2) | 2008.10.06 |
[Erlang] 얼랭 간보기 #2 (0) | 2008.09.29 |