MST

星途 面试题库

面试题:Java泛型在策略模式中如何优化代码结构

假设你正在使用策略模式处理一系列数据处理算法,每种算法处理的数据类型可能不同。请结合Java泛型,设计一个通用的策略模式框架,使其能灵活适应不同数据类型的处理算法。阐述设计思路,并提供核心代码实现,说明在这个设计中泛型是如何优化代码结构和提高可维护性的。
31.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义策略接口:使用泛型定义一个策略接口,该接口包含一个处理数据的方法,数据类型由泛型参数指定,这样不同的数据类型都可以通过实现该接口来提供对应的处理策略。
  2. 具体策略实现:针对不同的数据类型实现上述策略接口,实现具体的数据处理逻辑。
  3. 上下文类:创建一个上下文类,持有一个策略接口的实例,并提供一个方法来调用策略实例的处理方法,这样在运行时可以动态切换不同的策略。

核心代码实现

// 策略接口
interface DataProcessor<T> {
    void process(T data);
}

// 具体策略实现1
class IntegerProcessor implements DataProcessor<Integer> {
    @Override
    public void process(Integer data) {
        System.out.println("处理整数: " + data);
    }
}

// 具体策略实现2
class StringProcessor implements DataProcessor<String> {
    @Override
    public void process(String data) {
        System.out.println("处理字符串: " + data);
    }
}

// 上下文类
class Context<T> {
    private DataProcessor<T> dataProcessor;

    public Context(DataProcessor<T> dataProcessor) {
        this.dataProcessor = dataProcessor;
    }

    public void executeStrategy(T data) {
        dataProcessor.process(data);
    }
}

泛型优化代码结构和提高可维护性说明

  1. 代码结构优化:泛型使策略接口和上下文类能够适用于多种数据类型,而不需要为每种数据类型重复编写相似的代码结构,减少了代码冗余,提高了代码的复用性。例如DataProcessor接口和Context类通过泛型参数T,可以适配IntegerString等不同数据类型的处理策略,代码简洁且通用。
  2. 可维护性提高:当需要新增一种数据类型的处理策略时,只需要实现DataProcessor接口,而不需要修改现有策略接口和上下文类的代码。例如如果要新增对Double类型数据的处理策略,只需创建一个实现DataProcessor<Double>接口的类,而不会影响到已有的IntegerProcessorStringProcessor等策略实现类,降低了代码修改的风险和维护成本。