如果你希望通过一个抽象类来处理不同类型的数据(例如数组和列表),而不想为每种类型创建具体的子类,可以在抽象类中直接实现对不同数据类型的处理逻辑。可以通过检查传入数据的类型来决定如何处理它们。以下是一个可能的设计:
抽象类设计
import java.util.List;
public abstract class AbstractDataProcessor {
// 处理数据的通用方法
public final void processData(Object data) {
if (data instanceof Object[]) {
processArray((Object[]) data);
} else if (data instanceof List) {
processList((List<?>) data);
} else {
throw new IllegalArgumentException("Unsupported data type: " + data.getClass());
}
generateColumns(); // 生成列(默认实现或子类覆盖)
generateReport(); // 生成报告(由子类实现)
}
// 数组数据处理的具体逻辑
private void processArray(Object[] data) {
System.out.println("Processing array data...");
for (Object obj : data) {
processDataItem(obj);
}
}
// 列表数据处理的具体逻辑
private void processList(List<?> data) {
System.out.println("Processing list data...");
for (Object obj : data) {
processDataItem(obj);
}
}
// 处理单个数据项的抽象方法,由子类实现
protected abstract void processDataItem(Object item);
// 生成列的通用方法,子类可以覆盖
protected void generateColumns() {
System.out.println("Generating default columns...");
}
// 抽象方法:由子类实现具体的报告生成逻辑
protected abstract void generateReport();
}
使用示例
public class ConcreteDataProcessor extends AbstractDataProcessor {
@Override
protected void processDataItem(Object item) {
System.out.println("Processing item: " + item);
// 实现单个数据项的处理逻辑
}
@Override
protected void generateReport() {
System.out.println("Generating report for processed data...");
// 实现报告生成逻辑
}
}
public class DataProcessorExample {
public static void main(String[] args) {
AbstractDataProcessor processor = new ConcreteDataProcessor();
// 处理数组数据
Object[] arrayData = {1, 2, 3};
processor.processData(arrayData);
// 处理列表数据
List<Object> listData = List.of("a", "b", "c");
processor.processData(listData);
}
}
设计说明
- 数据类型判断:在
processData
方法中通过instanceof
判断数据类型,然后调用相应的私有方法处理具体的数据类型。 - 单个数据项处理:通过
processDataItem
抽象方法,允许子类定义如何处理每个数据项。 - 列生成和报告生成:提供了默认的列生成方法
generateColumns
,可以被子类覆盖。报告生成由generateReport
抽象方法负责,需要子类实现。
这种设计使得一个抽象类可以处理多种数据类型,而不需要为每种数据类型单独创建子类,从而简化了类的层级结构和代码管理。
标签:List,test4,子类,void,Object,数据类型,data From: https://www.cnblogs.com/kakaBluce/p/18531505