面试题答案
一键面试1. 设计思路
- 抽象类:定义一个抽象类,作为批量数据处理的基础框架。该抽象类包含模板方法和抽象方法。
- 模板方法:在抽象类中定义模板方法,此方法定义了数据处理的整体流程骨架,调用抽象方法来完成具体的处理步骤。模板方法通常被声明为
final
,防止子类重写打乱处理流程。 - 抽象方法:抽象方法由抽象类声明,但具体实现由子类完成。不同子类针对不同的数据处理逻辑实现这些抽象方法,以满足多样化的处理需求。
2. 示例代码
import java.util.List;
// 抽象数据处理类
abstract class DataProcessor<T> {
// 模板方法,定义数据处理的整体流程
public final void processData(List<T> dataList) {
for (T data : dataList) {
prepareData(data);
process(data);
saveResult(data);
}
}
// 抽象方法:数据预处理
protected abstract void prepareData(T data);
// 抽象方法:核心数据处理
protected abstract void process(T data);
// 抽象方法:保存处理结果
protected abstract void saveResult(T data);
}
// 具体数据处理子类,假设处理整数数据
class IntegerDataProcessor extends DataProcessor<Integer> {
@Override
protected void prepareData(Integer data) {
// 例如:检查数据是否为负数,若为负数取绝对值
if (data < 0) {
System.out.println("Preparing data: Making positive, original data: " + data);
}
}
@Override
protected void process(Integer data) {
// 例如:数据翻倍
System.out.println("Processing data: Doubling data, data: " + data);
}
@Override
protected void saveResult(Integer data) {
// 例如:打印处理后的结果表示保存
System.out.println("Saving result: " + data);
}
}
你可以使用以下方式测试上述代码:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> integerList = new ArrayList<>();
integerList.add(1);
integerList.add(-2);
integerList.add(3);
DataProcessor<Integer> integerDataProcessor = new IntegerDataProcessor();
integerDataProcessor.processData(integerList);
}
}
在上述代码中,DataProcessor
抽象类定义了数据处理的模板方法processData
,包含数据预处理、处理和保存结果三个抽象方法。IntegerDataProcessor
子类继承自DataProcessor
,并实现了这三个抽象方法,以处理整数类型的数据。Main
类中创建了整数数据列表,并使用IntegerDataProcessor
对数据进行批量处理。