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설명
그림 설명 : 위그림에서 중요한 사항은 추상메소드가 어떻게 호출되는지를 알수있지만, 어떤 처리가 수행되는지느 알수없습니다.
어려운설명 : 상위 클래스에서 처리 뼈대를 결정하고, 하위 클래스에서 그 구체적인 내용을 결정하는 디자인 패턴을 Template Method 패턴 이라고 부릅니다.