在Java 8中,减少代码重复的一个有效方法是使用设计模式,特别是策略模式和模板方法模式。这些模式可以帮助你将重复的代码逻辑抽象出来,使得代码更加简洁、可维护。
基础概念: 策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互换。策略模式让算法独立于使用它的客户端而变化。
优势:
类型:
应用场景:
示例代码:
// 策略接口
interface SortStrategy {
int[] sort(int[] array);
}
// 具体策略:冒泡排序
class BubbleSort implements SortStrategy {
@Override
public int[] sort(int[] array) {
// 冒泡排序实现
return array;
}
}
// 具体策略:快速排序
class QuickSort implements SortStrategy {
@Override
public int[] sort(int[] array) {
// 快速排序实现
return array;
}
}
// 上下文类
class SortContext {
private SortStrategy strategy;
public void setStrategy(SortStrategy strategy) {
this.strategy = strategy;
}
public int[] executeSort(int[] array) {
return strategy.sort(array);
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
SortContext context = new SortContext();
int[] array = {3, 1, 4, 1, 5, 9};
context.setStrategy(new BubbleSort());
int[] sortedArray = context.executeSort(array);
System.out.println(Arrays.toString(sortedArray));
context.setStrategy(new QuickSort());
sortedArray = context.executeSort(array);
System.out.println(Arrays.toString(sortedArray));
}
}
基础概念: 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
优势:
类型:
应用场景:
示例代码:
// 抽象模板类
abstract class AbstractClass {
// 模板方法
public final void templateMethod() {
step1();
step2();
step3();
}
protected abstract void step1();
protected abstract void step2();
protected abstract void step3();
}
// 具体模板类
class ConcreteClassA extends AbstractClass {
@Override
protected void step1() {
System.out.println("ConcreteClassA: Step 1");
}
@Override
protected void step2() {
System.out.println("ConcreteClassA: Step 2");
}
@Override
protected void step3() {
System.out.println("ConcreteClassA: Step 3");
}
}
class ConcreteClassB extends AbstractClass {
@Override
protected void step1() {
System.out.println("ConcreteClassB: Step 1");
}
@Override
protected void step2() {
System.out.println("ConcreteClassB: Step 2");
}
@Override
protected void step3() {
System.out.println("ConcreteClassB: Step 3");
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
AbstractClass classA = new ConcreteClassA();
classA.templateMethod();
AbstractClass classB = new ConcreteClassB();
classB.templateMethod();
}
}
通过使用策略模式和模板方法模式,你可以有效地减少代码重复,提高代码的可维护性和扩展性。
领取专属 10元无门槛券
手把手带您无忧上云