如何把一个大象装进冰箱

首先关上冰箱门,而后把大象赶进去,最初,piaji,关上冰箱门

这样咱们就播种了一只家养大象

装大象这样固定的三步走,和设计模式之模板办法是不是有点神似之处?

那么,模板办法到底给咱们提供了什么样的编码技巧,什么场景下能够去应用模板办法,框架中有没有对模板办法的使用,实在的业务场景又是如何应用该设计模式的,你在这一文都能够失去解答。

目录

  • 定义
  • 样例解析
  • 业务使用
  • 框架使用

浏览本文约需 6 分钟 ✍️

定义

模板办法 作为一种行为型的设计模式,

实质是定义好了一个算法的框架,并且容许子类为其中的一个或多个步骤提供实现

能够在最大的水平不侵入子类的外部逻辑的状况下,从新定义算法步骤

实用场景就在于,能够一次性的实现一个算法的不变局部(关上冰箱门、敞开冰箱门),将可变的行为留给子类来实现(装大象、装猴子、装蚂蚁)

该设计模式长处就在于能够进步代码的复用性、可扩展性、以及合乎开闭准则,毛病就在于减少了零碎的了解难度,以及是通过继承形式来实现的该设计模式,一旦减少了新的形象办法,其余子类代码都得改一遍

听了这一大堆定义,是不是感觉云里雾里

接下来,咱们回去那个大象的例子,你就能够了解

样例解析

咱们先定义一个抽象类 ARefrigeratorHandle

去实现咱们规定的开、放、关步骤

(这里会退出钩子办法,减少程序扩展性,具体能够看正文)

接下来,去实现放大象 PutElephant

接下来,去实现放猴子 PutMonkey (这里有钩子办法的具体使用)

能够察看到他们都去继承了 ARefrigeratorHandle 这个抽象类

万事具备,只欠测试

咱们来写一下简陋的测试类

ok,测试通过,咱们曾经简略把握了模板办法的使用,间隔升职加薪只有一步了

业务使用

业务场景是这样的

在金融生产场景,用户还款后,咱们须要及时将变更后的还款打算告诉给对应的资金方

在咱们零碎设计中,还款打算是一套规范字段

七七八八的资金方所承受的还款打算字段又不一样

比方在咱们的零碎设计上打算期次叫做 planPeriod,可是 a 资金方叫做 plan-period, b 资金方 叫做 period

所以在咱们推送前,须要对字段进行转换

整体步骤是 校验打算->转换字段->对立推送

框架使用

咱们在 idea 中搜寻 AbstractList 这么一个抽象类,并且很多的类都去实现了它,能够得悉是为了扩大 List 用的

接下来,咱们关注到 117 行,能够看到 get 的具体实现办法,都交由子类实现了,接下来看一下它的子类

 abstract public E get(int index);

能够察看到,咱们相熟的一个类 ArrayList

看一下 ArrayList 中的 get 办法

    public E get(int index) {        rangeCheck(index);        return elementData(index);    }

这就是 ArrayList 中对 get 的实现

当然你还能够察看到其余子类中 get 的实现

这就是一个简略的举例,大家还能够摸索一下 HttpServletBaseExecutor 中对模板办法的使用


文章完结

如果本文对你有所帮忙的话,那就点个赞吧

更多分享尽在 Skow 的微信公众号

公众号回复 “材料” 能够获取大厂面试题/技术文档/电子书等等


往期举荐

面试官居然和我死磕 Maven