MST

星途 面试题库

面试题:Java中模板方法模式在批量数据处理时如何实现基本框架搭建

请描述在Java中使用模板方法模式进行批量数据处理时,如何定义抽象类来搭建基本的处理框架,包括抽象方法和模板方法的设计思路与示例代码。
17.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

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对数据进行批量处理。