设计模式(三)Template Method模式
2024-09-01 12:11:50
在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为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类的具体实现。
最新文章
- LB 负载均衡的层次结构
- codeforces 734E(DFS,树的直径(最长路))
- [py]shell着色
- 02python算法-二分法简介
- Javascript题库
- jQuery实现长按按钮触发事件的方法
- 《大象-Think In UML》读书笔记3
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.3.Oracle 集群节点间连通失败
- 【Python】使用python的tornado配合html页面示例
- Service Oriented Architecture
- Android用户界面 UI组件--TextView及其子类(二) Button,selector选择器,sharp属性
- POJ Code the Tree 树的pufer编号
- Linux 查看系统硬件信息(实例详解)
- CGAffineTransform 放射变换解析 即矩阵变换
- finally块执行时间
- H5中的web worker示例demo分析
- buffer IO和direct IO
- 学习笔记---json和xml区别
- 000 Python的运行
- Tkernel Package NCollection哈希基础的类