Template Method Pattern,父类指定处理大纲,子类规定具体内容的设计模式叫做模版方法模式。
下面的示例是反复输出5次同一个字符或字符串。
名称 | 说明 |
AbstractDisplay | 只是现方法display的抽象类 |
CharDisplay | 实现方法open,print,close的类 |
StringDisplay | 实现方法open,print,close的类 |
Main | 测试类 |
AbstractDisplay 抽象类
-
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();
-
}
-
}
CharDispaly类
-
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("××");
-
}
-
}
StringDispaly 类
-
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.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("+");
-
} }
Main测试类
-
public class Main {
-
public static void main(String[] args) {
-
AbstractDisplay d1 = new CharDisplay('H');
-
AbstractDisplay d2 = new StringDisplay("Hello,World!");
-
d1.display();
-
d2.display();
-
}
-
}