秒懂系列:一文讲懂模版模式

546 阅读2分钟

对模版模式有了解吗,由于回答者说话声音太小,我没听见,我决定临阵磨一下枪,马于是我打开了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小咖秀>