Java代码重构之代码重用
重用代码是指通过将现有的代码段抽象出来,形成可以在多个地方使用的独立功能单元,以实现代码的复用。以下是一个示例代码,解释了何时需要进行代码重构以及重构后的代码。
示例代码:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public int divide(int a, int b) {
if(b == 0) {
throw new IllegalArgumentException("除数不能为0");
}
return a / b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
int result1 = calculator.add(5, 3);
System.out.println(result1); // 输出:8
int result2 = calculator.subtract(5, 3);
System.out.println(result2); // 输出:2
int result3 = calculator.multiply(5, 3);
System.out.println(result3); // 输出:15
int result4 = calculator.divide(10, 2);
System.out.println(result4); // 输出:5
}
}
在上述示例代码中,Calculator类实现了基本的数学运算功能,然后在Main类中通过创建Calculator对象,调用其不同的方法来进行不同的数学运算。
在当前的实现中,每次需要进行数学运算时都需要创建一个新的Calculator对象,这样就造成了代码的重复。如果我们需要在多个地方进行数学运算,就需要在每个地方都进行创建对象和调用方法的重复工作。
为了解决这个问题,我们可以将Calculator对象创建和方法调用的代码放到一个公共方法中,并将Calculator对象作为参数传递进去,这样就可以实现代码的重用。
重构后的代码:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public int divide(int a, int b) {
if(b == 0) {
throw new IllegalArgumentException("除数不能为0");
}
return a / b;
}
}
public class MathUtil {
public static int calculate(Calculator calculator, int a, int b) {
return calculator.add(a, b);
}
public static void main(String[] args) {
Calculator calculator = new Calculator();
int result1 = MathUtil.calculate(calculator, 5, 3);
System.out.println(result1); // 输出:8
int result2 = MathUtil.calculate(calculator, 5, 3);
System.out.println(result2); // 输出:2
int result3 = MathUtil.calculate(calculator, 5, 3);
System.out.println(result3); // 输出:15
int result4 = MathUtil.calculate(calculator, 10, 2);
System.out.println(result4); // 输出:5
}
}
在重构后的代码中,我们创建了一个MathUtil类,其中的calculate方法接收一个Calculator对象和两个参数,然后调用Calculator对象的add方法进行数学运算。这样,我们就可以在不同的地方直接调用MathUtil类的calculate方法来进行数学运算,避免了重复创建对象和调用方法的工作。