1、什么是模板模式
在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要要重写方法实现,但调用将以抽象类中定义的方式进行,这种类型的设计模式属于行为型模式
2、意图
定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定功能。
3、案例
开车接口
java
public abstract class KaiChe {
public final void kaiChe(){
kaiCheMen();
jiAnQUanDai();
daHuo();
guanDang();
caiYouMen();
}
//打开车门
abstract void kaiCheMen();
//系安全带
abstract void jiAnQUanDai();
//打火
abstract void daHuo();
//挂挡
abstract void guanDang();
//踩油门
abstract void caiYouMen();
}
开宝马车
java
public class DrivenBaoMa extends KaiChe{
@Override
void kaiCheMen() {
System.out.println("打开宝马车门");
}
@Override
void jiAnQUanDai() {
System.out.println("系安全带");
}
@Override
void daHuo() {
System.out.println("使用宝马钥匙打火");
}
@Override
void guanDang() {
System.out.println("挂一档");
}
@Override
void caiYouMen() {
System.out.println("踩油门");
}
}
测试
java
public class Test {
public static void main(String[] args) {
DrivenBaoMa drivenBaoMa=new DrivenBaoMa();
drivenBaoMa.kaiChe();
}
}
4、优缺点
优点:
1、封装不变,扩展可变【部分】
2、提取公共代码,便于维护
3、行为有父类控制,子类实现
缺点:
每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大
5、使用场景
1、有多个子类共有的方法,且逻辑相同
2、重要的、复杂的方法,可以考虑作为模板方法
注意:为了防止恶意操作,一般模板方法都加上final关键词
6、你所见到的模板模式
1、JdbcTemplate
2、RedisTemplate