地基
, 铺线
, 房子户型
都是一样的,由开发商决定,但是在交房之后,室内的 装修风格
和 场景布置
却是由业主决定,在这个场景中,开发商其实就是一个抽象类,地基,铺线,房子户型都是可以复用的,但是装修却是不可复用的,必须由业主决定,此时的每一个业主的房子就是一个实现的子类。 模板方法的实现条件注意:
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
,这些实现都用到了模板模式。