java 模板函数_重温Java中的模板方法设计模式
Java 8 lambda表达式的简洁性为经典的GoF设计模式提供了新的视角。通过利用函数式编程,我们可以通过更少的耦合获得相同的好处 - 模板方法就是一个很好的例子。
经典的GoF模板方法实现
模板方法设计模式是Gang of Four描述的23种设计模式之一 - 利用它可以轻松地符合Open-Closed和Hollywood原则。简而言之,它有助于定义某个算法的骨架,用户可以填充空白,这是通过覆盖定义骨架实现的抽象类所暴露的抽象方法来实现的。
更实际一点,想象一些场景,比如记录某些操作的执行时间,在事务中运行代码,或者我们负责以前/后测试方法形式填充空白的经典JUnit工作流 - 这些场景都是该模式闪耀之处。让我们看看一个相当简单的例子,它以简单的执行时间记录包围我们的代码。
经过专业训练的GoF设计模式从业者将使用抽象类来实现这个想法:
然后,如果我们想用记录逻辑包装我们的代码片段,我们只需要扩展该类,然后使用public方法:
然而,由于它依赖于继承,这种方法非常具有侵入性 - 它将类紧密地耦合在一起。
用函数简化模板方法
在我们的工具箱中使用新工具,我们可以使用上面的轻量级版本实现类似的效果,而不使用函数式编程思想。 既然我们现在可以传递函数,为什么不在这里做同样的事情呢?因此,我们可以在一个接受功能接口的方法中实现,而不是通过使用抽象类来定义:
现在,每当我们想要选择加入时,只需调用util方法来利用编译时方面的语义即可:
想要编写多个调用? 不是问题:
还可以写在action中,
总结
GoF中充满了规范性的想法,但随着新方法的出现,实现更好的实施,仍然值得重新审视。
java 模板函数_重温Java中的模板方法设计模式相关推荐
- java skip函数_【Java必修课】图说Stream中的skip()和limit()方法及组合使用
1 简介 本文将讲解Java 8 Stream中的两个方法:skip()和limit().这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和 ...
- java matcher函数_在Java正则表达式中使用Matcher.end()方法
方法java.util.regex.Matcher.end()返回根据正则表达式从序列中匹配最后一个字符后的偏移值.此方法不需要任何参数.如果没有匹配发生,或者匹配操作失败,则抛出IllegalSta ...
- java main函数_一行JAVA代码如何运行起来?
在程序员的世界中,你总会听到一句"PHP是世界上最好的语言"的调侃.然而在你进入软件程序开发之后,你会发现即使开发语言千千万,最盛行的还是JAVA.从淘宝的技术变迁中我们可以见一些 ...
- java arraylist 函数_使用Java-8中的函数ArrayList
问题描述: 我希望能够使用从另一个类传入的函数的ArrayList(其中函数已在其他类中定义).如果在一个类中定义了可能具有不同输入和返回类型的函数列表,我希望能够将其中一些的ArrayList(可能 ...
- java反转函数_在JAVA中,下列哪个函数可用于字符串的反转?
在JAVA中,下列哪个函数可用于字符串的反转? 更多相关问题 很多危机是无法准确预测的,必须为危机做好准备,包括().通信计划以及重要关系的建立等. (A) 危 幼儿园科技小制作可分为模型类.动力类. ...
- java string()函数_从Java中的String函数返回String构建器?
我有以下程序,我必须将字符串附加到另一个字符串,我使用字符串构建器以标准方式执行.但是,即使在将其转换为toString()之后,该函数也不允许我返回ab.我想问为什么? import java.ut ...
- java封装函数_关于java中函数功能的封装
//Triangle类,用于封装Triangle的属性及功能. package qing; public class Triangle { double sideA,sideB,sideC,area, ...
- java string()函数_转载java String.split()函数的用法详解
转载java String.split()函数的用法详解 如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!在java.lang包中有String.split()方法的原型是: p ...
- java cos函数_【Java案例】余弦函数
前面介绍的余弦曲线的绘制,我们看到的是一个完整的静态图形,能否动态地展现绘制的过程?答案是肯定的,我们可以采用线程的方式来实现,参考代码如下: import java.applet.Applet; i ...
最新文章
- Field Service Center Customization
- Pocket Hacking: NetHunter实战指南
- 活体检测方法概述与总结
- Oracle SQL Parsing Flow Diagram(SQL 解析流程图)
- 转 最小生成树(kruskal 算法 和prim算法)
- Ace Admin 学习笔记
- thinkphp的find()方法获取结果
- 设置广告 php,设置ecshop广告位
- 为Vue2集成UIkit
- Atitti.数字证书体系cer pfx attilax总结
- Xmind模板文档分享——生活计划(3)
- 【CVPR2022】论文列表与下载——PartFour
- PS修皮肤去痘痘毛孔,只需要掌握这个技巧就够了
- Linux内核info leak漏洞
- select句柄数限制 及总结
- 【Unity Shader 描边效果_案例分享】
- android话费查询接口,Android 小应用--一键查话费移动版(附源码)
- 四大主流CA机构——国产占据其一
- 2020Kali开机配置(中文输入法等)
- 五位来自五大洲的杰出女性荣获联合国教科文组织“世界杰出女科学家成就奖” | 周末...