侠说java8-行为参数化(开山篇)

2023-12-28 06:50
文章标签 java 参数 行为 开山

本文主要是介绍侠说java8-行为参数化(开山篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

啥是行为参数化

  • 行为参数化的本质是不执行复杂的代码块,让逻辑清晰可用。
  • 相信使用过js的你肯定知道,js是可以传递函数的,而在
    java中也有类似的特性,那就是匿名函数。

理解:行为参数化是一种方法,可以接收多种不同行为作为其参数,并在内部使用它们来完成任务。

将公共的逻辑抽象

一个类几万行,遍地的if else,让人摸不着北,函数太长容易将众多的业务逻辑混杂到一起,一是可读性很差,二是耦合性很高,容易牵一发而动全一身。

具体实践,可以额参考在重构改善代码既有设计一书中,提到的几种抽象方法。

file

提炼函数

将一段代码放在独立的函数中,通过函数名来解释这个函数的用途,加上注释,尽量将每个函数的粒度都控制在很小的范围,这样函数的复用性就会大大增加。

file

提炼接口

上面说了我们可以采用匿名函数或者具体的实现方式来做到行为参数化。所以提炼接口同样重要,一切不以抽象为原则的编码,都是耍流氓。

将具有相同点的子集,抽象出独立的接口。

假如一个业务类,依赖于一些配置才能正常工作,例如,项目运行的端口,通常情况下我们都是从配置文件里面读取。

file

假如有一天,业务变更,说要从mysql中读配置。

file

又有一天,业务调整,说不用mysql了,统一迁移成No sql数据库。

file

这里谈到 的,获取配置信息的这个功能,就可以抽象成一个接口,不论怎么调整,只需要增加获取逻辑就行。当然只是举例,具体还是得看业务变更情况来定。

总结:将尽可能多的能够复用的行为抽象成接口,让代码逻辑更清晰,职责划分更清楚。

如何使用行为参数化

引用java8 in action中的行为参数化的例子:

需求是:需要获取所有的绿苹果。

file

如果需求改为获取所有的红苹果,你肯定不会想要复制上面的整个方法。那干脆把颜色作为参数传递。

file

某一天,需求又变了,说苹果要大的不要小的,要某一个品种的.....

所有的这种变更,其实都是不同的过滤条件,有得简单,有的复杂。在这里我们就可以把不同的行为作为参数传递下来。

file

不同的行为实现不同的接口,目的都为一个:过滤掉不符合要求的苹果。

行为参数化的好处

作为开发人员,相信都经历过频繁的需求变动,因为在软件开发过程中,用户需求是瞬息万变的,这种变动可以说是家常便饭,毕竟唯一不变的就是变化。

将行为作为参数传递可以帮助我们在需求变更时,减轻代码的更改量,也就是间接减轻变更给我们带来的痛苦!

欢迎来公众号【侠梦的开发笔记】 一起交流进步

这篇关于侠说java8-行为参数化(开山篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/545267

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�