导读
什么是模板模式
模板模式首先要有一个抽象类,这个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
定义:「定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。」
比如在造房子一样,地基,铺线,房子户型都是一样的,由开发商决定,但是在交房之后,室内的装修风格和场景布置却是由业主决定,在这个场景中,开发商其实就是一个抽象类,地基,铺线,房子户型都是可以复用的,但是装修却是不可复用的,必须由业主决定,此时的每一个业主的房子就是一个实现的子类。
模板方法的实现条件注意:
必须是一个抽象类。
抽象类有一个模板方法,其中定义了算法骨架。
为了防止恶意操作,模板方法必须加上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();
}
}
足球游戏初始化中......
足球游侠开始了......
足球游戏结束......
Spring中的模板模式
模板抽象类
模板方法
//提交事务
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()
具体子类
总结
模板模式是一个很重要,易扩展的模式,提高了代码复用性,在Spring中有着广泛的应用,比如JDBCTemplate,AbstractPlatformTransactionManager,这些实现都用到了模板模式。
如果觉得陈某的文章能够对你有所帮助,有所启发,关注分享一波,点个在看,谢谢支持!!!