关于java:从装大象中我们学会了什么设计模式

8次阅读

共计 1329 个字符,预计需要花费 4 分钟才能阅读完成。

如何把一个大象装进冰箱

首先关上冰箱门,而后把大象赶进去,最初,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

正文完
 0