图解设计模式之【Template Method】 模式

Template Method 模式


1.定义:模板模式,也就是临摹的意思,父类中定义了模板,在子类中实现具体的处理.(活字印刷术)

2.示例程序

3.示例代码

AbstractDisplay.java

package TemplateMethod;

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();                     // 循环调用5次print()方法

          }

          close();                          // 关闭

     }

}

CharDisplay.java

package TemplateMethod;

public class CharDisplay extends AbstractDisplay {

     private char ch;                      //构造方法接受要显示的字符

     public CharDisplay(char ch) {

          this.ch = ch;

     }

     public void open() {

          System.out.print("<<");      //重写open()方法

     }

     public void print() {

          System.out.print(ch);             //重写print()方法

     }

     public void close() {

          System.out.println(">>");         //重写close()方法

     }

}

StringDisplay.java

package TemplateMethod;

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

     }

     @Override

     public void print() {

          System.out.println("|" + string + "|");

     }

     @Override

     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

package TemplateMethod;

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

     }

}

4.模板类角色

5.拓展思路

原创文章 63 获赞 48 访问量 8万+

猜你喜欢

转载自blog.csdn.net/csp_6666/article/details/88981719