对模版模式有了解吗,由于回答者说话声音太小,我没听见,我决定临阵磨一下枪,马于是我打开了Java小咖秀的公众号,正好近小编正在更新。
面试官走来了,他来了,他来了,他带着一堆问题走来了。
面试官拿着简历,坐下来看着简历。
面试官:做一下自己介绍吧。
小呆: !@#¥!##¥(*&&&%。
面试官:说一下你对模版模式的理解,以及模版模式的优缺点?
小呆:就是在一个抽象父类里定义好流程的框架,在子类中可以按需重写方法的实现,这种模式属于行为型设计模式。
它的uml图:
比如 把 xx 放进冰箱就是模版模式。
这一天韩梅梅和李雷拎着一袋冰淇淋回到家里,于是准备把冰淇淋以及昨天的剩菜放到冰箱里,于是他们现实设计了一个uml图:
public abstract class Template {
public final void packIn() {
open();
putIn();
close();
}
public void open() {
System.out.println("打开冰箱门!");
}
public abstract void putIn();
public void close(){
System.out.println("关上冰箱门!");
}
复制代码
}
public class IceCream extends Template {
@Override
public void putIn() {
System.out.println("把冰淇淋放入下层冰箱~");
}
复制代码
}
public class LeftoverFood extends Template {
@Override
public void putIn() {
System.out.println("把剩菜放入上层冰箱~");
}
复制代码
}
public class Client {
public static void main(String[] args) {
Template iceGream = new IceCream();
iceGream.packIn();
Template leftoverFood = new LeftoverFood();
leftoverFood.packIn();
}
复制代码
}
处理结果:
打开冰箱门! 把冰淇淋放入下层冰箱~ 关上冰箱门! 打开冰箱门! 把剩菜放入上层冰箱~ 关上冰箱门!
优点:封装不变部分,可以自己扩展可变部分,提取公共代码,复用性好,便于维护。
缺点:每一个不同的实现就需要新增一个类,随着类的增加,使得系统更臃肿。
面试官:模版模式有什么需要注意的地方吗。
小呆: 一般会在模版方法上加上final关键字,防止子类重写,可以重写的情况除外。
面试官 :你知道这种设计模式在哪些框架中的什么地方有应用到吗。
小呆 : Java中的AbstractList,Spring中的JdbcTemplate。(详细的这里大家可以去看Java和Spring源码)
面试官:那我继续问几个问题。
小呆:...
END 如果小伙伴们对源码有兴趣的话,后面文章和大家一起学习,感谢大家的陪伴。
获取更多精彩 关注我的公众号 <Java小咖秀>