设计思路
- 定义策略接口:使用泛型定义一个策略接口,该接口包含一个处理数据的方法,数据类型由泛型参数指定,这样不同的数据类型都可以通过实现该接口来提供对应的处理策略。
- 具体策略实现:针对不同的数据类型实现上述策略接口,实现具体的数据处理逻辑。
- 上下文类:创建一个上下文类,持有一个策略接口的实例,并提供一个方法来调用策略实例的处理方法,这样在运行时可以动态切换不同的策略。
核心代码实现
// 策略接口
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);
}
}
泛型优化代码结构和提高可维护性说明
- 代码结构优化:泛型使策略接口和上下文类能够适用于多种数据类型,而不需要为每种数据类型重复编写相似的代码结构,减少了代码冗余,提高了代码的复用性。例如
DataProcessor
接口和Context
类通过泛型参数T
,可以适配Integer
、String
等不同数据类型的处理策略,代码简洁且通用。
- 可维护性提高:当需要新增一种数据类型的处理策略时,只需要实现
DataProcessor
接口,而不需要修改现有策略接口和上下文类的代码。例如如果要新增对Double
类型数据的处理策略,只需创建一个实现DataProcessor<Double>
接口的类,而不会影响到已有的IntegerProcessor
和StringProcessor
等策略实现类,降低了代码修改的风险和维护成本。