以下是我現階段對模板方法模式的理解:
模板模式比較好理解,並且java.io.InputStream這個類使用了tempalte method 模式。
父類中定義抽象方法和模版,子類去實現方法。就像畫板一樣,你刻一個畫板的模具,用鉛筆塗鴉就是鉛筆的效果,用彩筆塗鴉就是彩筆的效果。
但是無論那種效果,都是由模板指定好的圖形來的。
public abstract class AbstractDisplay {
public abstract void begin();
public abstract void print();
public abstract void end();
//這個就是模版,執行流程在父類中被定義
public void display() {
begin();
for (int i = 0; i < 5; i++) {
print();
}
end();
}
}
public class CharDisplay extends AbstractDisplay {
private char aChar;
public CharDisplay(char aChar) {
this.aChar = aChar;
}
@Override
public void begin() {
System.out.println("<<");
}
@Override
public void print() {
System.out.println(aChar);
}
@Override
public void end() {
System.out.println(">>");
}
}
public class StringDisplay extends AbstractDisplay {
private String string;
public StringDisplay(String string) {
this.string = string;
}
@Override
public void begin() {
System.out.println("+----------+");
}
@Override
public void print() {
System.out.println("|" + string + "|");
}
@Override
public void end() {
System.out.println("+=========+");
}
}
public class Main {
public static void main(String[] args) {
AbstractDisplay abstractDisplay1 = new CharDisplay('H');
AbstractDisplay abstractDisplay2 = new StringDisplay("你好");
abstractDisplay1.display();
abstractDisplay2.display();
}
}