在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Method模式即模板方法模式。

  

  根据下面的示例程序理解模板方法模式。

 package BigJunOba.bjtu.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();
}
close();
}
}

  AbstractDisplay类是示例程序的核心。该类只实现了display方法,这个实现了的方法就是处理流程的框架。之后的子类都是按照这个框架来进行流程。(注意:这里的display方法是final方法,即子类不能继承这个方法也不能修改这个方法,只能调用这个方法。)

 package BigJunOba.bjtu.TemplateMethod;

 public class CharDisplay extends AbstractDisplay {

     private char ch;

     public CharDisplay(char ch) {
this.ch = ch;
} @Override
public void open() {
System.out.print("<<");
} @Override
public void print() {
System.out.print(ch);
} @Override
public void close() {
System.out.println(">>");
} }

  作为子类之一的CharDisplay类可以对单个字符进行打印操作。

 package BigJunOba.bjtu.TemplateMethod;

 public class StringDisplay extends AbstractDisplay {

     private String string;
private int width; public StringDisplay(String string) {
this.string = string;
this.width = string.getBytes().length;
} @Override
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("+");
}

  作为子类之一的StringDisplay可以对字符串进行操作。

 package BigJunOba.bjtu.TemplateMethod;

 public class Main {
public static void main(String[] args) {
AbstractDisplay d1 = new CharDisplay('H');
AbstractDisplay d2 = new StringDisplay("Fighting, BigJun");
d1.display();
d2.display();
}
}

  main方法中,生成了CharDisplay和StringDisplay的示例,然后可以调用继承的display方法。实际的程序行为取决于CharDisplay类和StringDisplay类的具体实现。

 

最新文章

  1. LB 负载均衡的层次结构
  2. codeforces 734E(DFS,树的直径(最长路))
  3. [py]shell着色
  4. 02python算法-二分法简介
  5. Javascript题库
  6. jQuery实现长按按钮触发事件的方法
  7. 《大象-Think In UML》读书笔记3
  8. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.3.Oracle 集群节点间连通失败
  9. 【Python】使用python的tornado配合html页面示例
  10. Service Oriented Architecture
  11. Android用户界面 UI组件--TextView及其子类(二) Button,selector选择器,sharp属性
  12. POJ Code the Tree 树的pufer编号
  13. Linux 查看系统硬件信息(实例详解)
  14. CGAffineTransform 放射变换解析 即矩阵变换
  15. finally块执行时间
  16. H5中的web worker示例demo分析
  17. buffer IO和direct IO
  18. 学习笔记---json和xml区别
  19. 000 Python的运行
  20. Tkernel Package NCollection哈希基础的类

热门文章

  1. Mac OS Catalina 如何删除自带的应用
  2. [Python] Python 学习记录(1)
  3. 死磕 java线程系列之自己动手写一个线程池(续)
  4. Flutter 的基本控件
  5. MyBatis拦截器自定义分页插件实现
  6. NOIP2011计算系数;
  7. Elasticsearch Java API 很全的整理
  8. Switch-case语句的应用
  9. MQ相关面试题
  10. RF自定义库和关键字