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();
- }
- }