模版设计模式的定义
定义一个操作中的算法的框架,而将一些步骤放到子类中,是的子类可以不改变该算法框架即可重定义该算法的某些特定步骤
简单实例: 计算程序运行时间的模版
- 注意: 一般模版方法都会加上final关键字,不允许被重写
abstract class TimeTempalte{
//模版方法
public final void getMillis(){ //计算运行时间的框架
long startTime = System.currentTimeMillis(); //记录开始时间
code(); //程序代码
long endTime = System.currentTimeMillis(); //记录结束时间
System.out.println("运行时间: "+ (endTime - startTime));
}
public abstract void code(); //通过抽象方法交给子类具体定义需要计算的程序代码
}
优缺点
- 优点
- 具体细节步骤实现定义在子类中,不会改变整体的结构
- 代码复用的基本技术,在数据库设计中尤为重要
- 存在一种反向的控制结构,通过一个父类调用其子类的操作,通过子类对父类进行扩展增加新的行为,符合”开闭原则”
- 不足
- 每个不同的实现都需要定义一个子类,会导致类的个数增加,系统更加庞大
使用场景
- 多个子类公有的方法,并且逻辑基本相同
- 重要丶复杂的算法,可以把核心算法设计为模版方法,周边的相关细节功能则由各个子类实现
- 重构时经常使用,把相同代码抽取到父类中