模板方法设计模式(TemplateMethod)
抽象类就像是子类的通用模板,子类在抽象类的基础上扩展、改造。
思想
当功能内部一部分是确定的,一部分是不确定的,这时把不确定的部分暴露出去,给子类去实现。
模板模式就是:实现一个算法时,整体步骤很固定,在父类中写好。某些易变的部分抽象出来供子类实现。
应用
- 数据库访问的封装
- Junit单元测试
- JavaWeb 的 Servlet 中 关于doGet/doPost方法的调用
- Hibernate 中模板程序
- Spring中JDBCTemplate、HibernateTemplate等
练习
练习1:计算某段代码执行所花费的时间。
父类写好获取时间的框架:
abstract class Template{
public void spendTime(){
long start = System.currentTimeMillis();
code();
long end = System.currentTimeMillis();
long spend = end - start;
System.out.println("花费时间:" + spend);
}
abstract void code();
}
具体的某段代码不确定,交给子类重写:
class SubTemplate extends Template{
@Override
void code() {
//10000以内的质数
}
练习二:银行办理业务。取号功能,办理业务功能,服务评分功能。
取号、评分是确定的功能,写到父类框架。不同顾客办理业务不同,交由子类重写。