在非流上下文中使用java.util.Function的设计实践

时间:2017-09-20 17:16:01

标签: java design-patterns

我目前正在一个方法中定义一个功能来帮助实现两个目标:

  1. 简化非流驱动代码部分中的if块,
  2. 将函数封装在仅适用于该方法的方法中 相关的。
  3. 示例(仅供说明):

    "ComIPduCancellationSupport"

    在我的情况下,Function方法有点复杂,涵盖了我在if块中检查的特定业务案例。

    是否有针对此建议的标准设计模式或反模式?我特意寻找的答案不仅仅是个人偏好。

    ===

    汇总结果:

    Pro:封装,可读性以及对范围内最终/有效最终变量的访问。

    Con's:拥有太多或太复杂的函数可能会产生代码易读性问题。

1 个答案:

答案 0 :(得分:1)

Function<T,R>的使用是一种代表本地方法的模式 - 这是Java中缺少的一种语言特性,但存在于其他编程语言中。

使用此模式绝对没有错,特别是如果您计划在同一方法实现中多次重复使用相同的验证逻辑。

与私有方法不同,本地函数允许您隐式捕获param1param2,以备不时之需:

final Function<String, Boolean> isValidString = parm -> parm.equals(param1); 
//                                                                     ^
//                                                                     |
// Implicitly captured param1   ---------------------------------------+

注意:由于您的函数返回Boolean,因此更合适的界面为Predicate<String>

final Predicate<String> isValidString = parm -> parm.equals("Test") || parm.equals("Test2");
...
if (parm1 != null && isValidString.test(parm)) {
    ...
}