地基 , 铺线 , 房子户型 都是一样的,由开发商决定,但是在交房之后,室内的 装修风格 和 场景布置 却是由业主决定,在这个场景中,开发商其实就是一个抽象类,地基,铺线,房子户型都是可以复用的,但是装修却是不可复用的,必须由业主决定,此时的每一个业主的房子就是一个实现的子类。 模板方法的实现条件注意:
final
比如游戏的运行需要如下几个步骤:
final 修饰。 public abstract class Game {
//抽象方法
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
//模板方法
public final void play(){
//初始化游戏
initialize();
//开始游戏
startPlay();
//结束游戏
endPlay();
}
}
public class Football extends Game {
@Override
void endPlay() {
System.out.println("足球游戏结束......");
}
@Override
void initialize() {
System.out.println("足球游戏初始化中......");
}
@Override
void startPlay() {
System.out.println("足球游侠开始了......");
}
}
public class TemplatePatternDemo {
public static void main(String[] args) {
//创建足球游戏实例
Game game = new Football();
//开始游戏
game.play();
}
}
足球游戏初始化中...... 足球游侠开始了...... 足球游戏结束......
AbstractPlatformTransactionManager 是Spring中的 模板抽象类 ,来看看它的继承关系图:
PlatformTransactionManager 接口,重载了接口中的方法。 //提交事务 public final void commit() //获取TransactionStatus public final TransactionStatus getTransaction()
//提交事务 protected abstract void doCommit(DefaultTransactionStatus status); //回滚事务 protected abstract void doRollback(DefaultTransactionStatus status); //开始事务 protected abstract void doBegin(Object transaction, TransactionDefinition definition) //获取当前的事务对象 protected abstract Object doGetTransaction()
DataSourceTransactionManager 、 JtaTransactionManager 、 RabbitTransactionManager 。具体承担什么样的角色和责任不是本节的重点,不再细说。 JDBCTemplate , AbstractPlatformTransactionManager ,这些实现都用到了模板模式。