Template Method Pattern,父類指定處理大綱,子類規定具體內容的設計模式叫做模版方法模式。
下面的示例是反覆輸出5次同一個字符或字符串。
名稱 | 說明 |
AbstractDisplay | 只是現方法display的抽象類 |
CharDisplay | 實現方法open,print,close的類 |
StringDisplay | 實現方法open,print,close的類 |
Main | 測試類 |
- 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 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.print("××");
- }
- }
- public class StringDisplay extends AbstractDisplay { //他也是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.print("|"+string+"|");
- }
- public void close() {
- printLine(); }
- private void printLine() {
- System.out.print("+");
- for(int i = 0 ;i < width ; i++) {
- System.out.print("--");
- }
- System.out.println("+");
- } }
- public class Main {
- public static void main(String[] args) {
- AbstractDisplay d1 = new CharDisplay('H');
- AbstractDisplay d2 = new StringDisplay("Hello,World!");
- d1.display();
- d2.display();
- }
- }