如何把一个大象装进冰箱
首先关上冰箱门,而后把大象赶进去,最初,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 的实现
这就是一个简略的举例,大家还能够摸索一下 HttpServlet 、 BaseExecutor 中对模板办法的使用
文章完结
如果本文对你有所帮忙的话,那就点个赞吧
更多分享尽在 Skow 的微信公众号
公众号回复 “材料” 能够获取大厂面试题/技术文档/电子书等等
往期举荐
面试官居然和我死磕 Maven