96SEO 2026-02-20 09:59 13
。

大家都知道重复代码不好#xff0c;它主要有这些缺点#xff…
前言1、抽取公用方法2、抽工具类3、反射4、泛型5、继承与多态6、使用设计模式7、自定义注解(或者说AOP面向切面)8、函数式接口和Lambda表达式
日常开发中我们经常会遇到一些重复代码。
大家都知道重复代码不好它主要有这些缺点可维护性差、可读性差、增加错误风险等等。
这里给大家讲讲优化重复代码的几种方式。
比如这个例子分别遍历names列表然后各自转化为大写和小写打印出来
TianLuo);System.out.println(Uppercase
name.toUpperCase();System.out.println(uppercaseName);}System.out.println(Lowercase
name.toLowerCase();System.out.println(lowercaseName);}}
显然都是遍历names过程代码是重复的只不过转化大小写不一样。
我们可以抽个公用方法processNames优化成这样
{System.out.println(processType
nameProcessor.apply(name);System.out.println(processedName);}}public
我们优化重复代码抽一个公用方法后如果发现这个方法有更多共性就可以把公用方法升级为一个工具类。
比如这样的业务场景我们注册的时候修改邮箱重置密码等都需要校验邮箱。
Pattern.compile(EMAIL_REGEX);Matcher
}在密码重置流程中通常会向用户提供一个链接或验证码并且需要发送到用户的电子邮件地址。
在这种情况下也需要验证邮箱格式合法性
Pattern.compile(EMAIL_REGEX);Matcher
pattern.matcher(passwordInfo.getEmail());if
false;}//发送通知修改密码sendReSetPasswordNotify();}
}我们可以抽取个校验邮箱的方法出来又因为校验邮箱的功能在不同的类中因此我们可以抽个校验邮箱的工具类
Pattern.compile(EMAIL_REGEX);public
(!EmailValidatorUtil.isValid(userInfo.getEmail()))
我们日常开发中经常需要进行PO、DTO和VO的转化。
所以大家经常看到类似的代码
UserInfoVO();userInfoVO.setUserName(userInfoDTO.getUserName());userInfoVO.setAge(userInfoDTO.getAge());return
UserInfoDTO();userInfoDTO.setUserName(userInfoPO.getUserName());userInfoDTO.setAge(userInfoPO.getAge());return
我们可以使用BeanUtils.copyProperties()
去除重复代码BeanUtils.copyProperties()底层就是使用了反射
UserInfoVO();BeanUtils.copyProperties(userInfoDTO,
UserInfoDTO();BeanUtils.copyProperties(userInfoPO,userInfoDTO);return
泛型是如何去除重复代码的呢给大家看个例子我有个转账明细和转账余额对比的业务需求有两个类似这样的方法
getAndUpdateBalanceResultMap(String
compareResultListMap.getOrDefault(key,
ArrayList());tempList.addAll(balanceDTOs);compareResultListMap.put(key,
getAndUpdateDetailResultMap(String
compareResultListMap,ListTransferDetailDTO
compareResultListMap.getOrDefault(key,
ArrayList());tempList.addAll(detailDTOS);compareResultListMap.put(key,
}这两块代码,流程功能看着很像,但是就是不能直接合并抽取一个公用方法,因为类型不一致。
单纯类型不一样的话,我们可以结合泛型处理,因为泛型的本质就是参数化类型.优化为这样:
compareResultListMap.getOrDefault(key,
tempList.addAll(accountingDTOS);
假设你正在开发一个电子商务平台需要处理不同类型的订单例如普通订单和折扣订单。
每种订单都有一些共同的属性如订单号、购买商品列表和方法如计算总价、生成订单报告但折扣订单还有特定的属性和方法。
products;this.discountPercentage
}显然,看到在Order和DiscountOrder类中generateOrderReport()
方法的代码是完全相同的。
calculateTotalPrice()则是有一点点区别但也大相径庭。
我们可以使用继承和多态去除重复代码,让DiscountOrder去继承Order,代码如下:
products);this.discountPercentage
discountPercentage;}Overridepublic
super.calculateTotalPrice();return
很多设计模式可以减少重复代码、提高代码的可读性、可扩展性.比如:
通过工厂模式你可以将对象的创建和使用分开从而减少重复的创建代码。
策略模式:
策略模式定义了一族算法将它们封装成独立的类并使它们可以互相替换。
通过使用策略模式你可以减少在代码中重复使用相同的逻辑。
模板方法模式:模板方法模式定义了一个算法的骨架将一些步骤延迟到子类中实现。
这有助于避免在不同类中重复编写相似的代码。
假设你正在开发一个咖啡和茶的制作流程制作过程中的热水和添加物质的步骤是相同的但是具体的饮品制作步骤是不同的。
{boilWater();brewCoffeeGrinds();pourInCup();addCondiments();}private
{boilWater();steepTeaBag();pourInCup();addLemon();}private
}这个代码例子,我们可以发现,烧水和倒入杯子的步骤代码,在Coffee和Tea类中是重复的。
{boilWater();brew();pourInCup();addCondiments();}private
}在这个例子中我们创建了一个抽象类Beverage其中定义了制作饮品的模板方法
prepareBeverage()。
这个方法包含了烧水、倒入杯子等共同的步骤而将制作过程中的特定步骤
和addCondiments()延迟到子类中实现。
这样我们避免了在每个具体的饮品类中重复编写相同的烧水和倒入杯子的代码提高了代码的可维护性和重用性。
假设你正在开发一个Web应用程序需要对不同的Controller方法进行权限检查。
每个Controller方法都需要进行类似的权限验证但是重复的代码会导致代码的冗余和维护困难。
}你可以看到在每个需要权限校验的方法中都需要重复编写相同的权限校验逻辑,即出现了重复代码.我们使用自定义注解的方式能够将权限校验逻辑集中管理通过切面来处理,消除重复代码.如下:
{Before(annotation(requiresPermission))public
checkPermission(RequiresPermission
(!User.hasPermission(permission))
{RequiresPermission(read)public
implementation}RequiresPermission(write)public
}就这样不管多少个Controller方法需要进行权限检查你只需在方法上添加相应的注解即可。
权限检查的逻辑在切面中集中管理避免了在每个Controller方法中重复编写相同的权限验证代码。
这大大提高了代码的可读性、可维护性并避免了代码冗余。
假设你正在开发一个应用程序需要根据不同的条件来过滤一组数据。
每次过滤的逻辑都可能会有些微的不同但基本的流程是相似的。
filterPositiveNumbers(ListInteger
}在这个例子中我们有两个不同的方法来过滤一组数据但是基本的循环和条件判断逻辑是重复的,我们可以使用使用函数式接口和Lambda表达式,去除重复代码,如下:
Predicate函数式接口作为参数以便根据不同的条件来过滤数据。
然后我们可以使用Lambda表达式来传递具体的条件,这样最终也达到去除重复代码的效果啦.
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback