优化重复冗余代码的8种方式!

本文介绍了如何通过抽取公用方法、工具类、反射、泛型、继承多态、设计模式(如工厂模式、策略模式、模板方法和AOP)以及使用函数式接口和Lambda表达式来减少代码冗余,提升代码可维护性和可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

日常开发中,我们经常会遇到一些重复冗余的代码。大家都知道重复代码不好,它主要有这些缺点:可维护性差、可读性差、增加错误风险等等。最近呢,我优化了一些系统中的重复代码,用了好几种的方式,感觉挺有用的。所以本文给大家讲讲优化重复冗余代码的几种方式~

  • 抽取公用方法
  • 抽个工具类
  • 反射
  • 泛型
  • 继承和多态
  • 设计模式
  • 函数式Lambda
  • AOP切面

1. 抽取公用方法

抽取公用方法,是最常用的代码去重方式~

比如这个例子,分别遍历names列表,然后各自转化为大写和小写打印出来:

public class TianLuoExample {
   

    public static void main(String[] args) {
   
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "TianLuo");

        System.out.println("Uppercase Names:");
        for (String name : names) {
   
            String uppercaseName = name.toUpperCase();
            System.out.println(uppercaseName);
        }

        System.out.println("Lowercase Names:");
        for (String name : names) {
   
            String lowercaseName = name.toLowerCase();
            System.out.println(lowercaseName);
        }
    }
}

显然,都是遍历names过程,代码是重复冗余的,只不过转化大小写不一样而已。我们可以抽个公用方法processNames,优化成这样:

public class TianLuoExample {
   

    public static void processNames(List<String> names, Function<String, String> nameProcessor, String processType) {
   
        System.out.println(processType + " Names:");
        for (String name : names) {
   
            String processedName = nameProcessor.apply(name);
            System.out.println(processedName);
        }
    }

    public static void main(String[] args) {
   
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "TianLuo");

        processNames(names, String::toUpperCase, "Uppercase");
        processNames(names, String::toLowerCase, "Lowercase");
    }
}

2. 抽工具类

我们优化重复代码,抽一个公用方法后,如果发现这个方法有更多共性,就可以把公用方法升级为一个工具类。比如这样的业务场景:注册,修改邮箱,重置密码等,都需要校验邮箱

实现注册功能时,用户会填邮箱,需要验证邮箱格式,

public class RegisterServiceImpl implements RegisterService{
   
    private static final String EMAIL_REGEX =
        "^[A-Za-z0-9+_.-]+@(.+)$";

    public boolean registerUser(UserInfoReq userInfo) {
   
        String email = userInfo.getEmail();
        Pattern pattern = Pattern.compile(EMAIL_REGEX);
        Matcher emailMatcher = pattern.matcher(email);
        if (!emailMatcher.matches()) {
   
            System.out.println("Invalid email address.");
            return false;
        }

        // 进行其他用户注册逻辑,比如保存用户信息到数据库等
        // 返回注册结果
        return true;
    }
}

在密码重置流程中,通常会向用户提供一个链接或验证码,并且需要发送到用户的电子邮件地址。在这种情况下,也需要验证邮箱格式合法性:

public class PasswordServiceImpl implements PasswordService{
   

    private static final String EMAIL_REGEX =
        "^[A-Za-z0-9+_.-]+@(.+)$";

    public void resetPassword(PasswordInfo passwordInfo) {
   
        Pattern pattern = Pattern.compile(EMAIL_REGEX);
        Matcher emailMatcher = pattern.matcher(passwordInfo.getEmail());
        if (!emailMatcher.matches()) {
   
            System.out
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyufeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值