[英]Structure java classes (best practice)
我已经编写了一些Java类来导入Excel文件的内容。
Excel的内容主要具有以下数据类型:静态,动态和静态动态结合在一起。
问题是编写导入程序类的最佳结构是什么。 我需要导入动态,静态和动态静态内容的方法
我的想法如下:
//Class to import dynamic content
abstract class DynamicImporter{
void importDynamicExcel(){
}
//class to import static content
abstract class StaticImporter{
void importStaticExcel(){
}
现在的问题是我拥有同时具有动态和静态内容的excel。 不可能做这样的事情
abstract class DynamicStaticImporter extends StaticImporter, StaticImporter{
}
任何想法有什么办法可以解决此类问题?
使用ExcelImporter
接口, AbstractExcelImporter
获取共享代码和所需的三个实现。
您将需要一个具有共享实现的抽象类。 不需要3个抽象类。 或者,您可以使用构建器模式进行合成
abstract class AbstractExcelImporter{
void importExcel(){
//implementation
}
}
//Class to import dynamic content
class DynamicImporter extends AbstractExcelImporter{
void importDynamicExcel(){
importExcel();
//type spesific implementation or overridde importExcel method
}
}
在多继承上实现分派的一种替代方法是将层次结构展平为一个类,并为其提供一个方法,该方法将要执行的导入类型(静态,动态等)的描述符作为其参数:
enum ImportType {
STATIC
, DYNAMIC
, STATIC_DYNAMIC
}
class Importer {
void importExcel(ImportType impType) {
...
}
}
反过来,可以使用属性和方法来增强ImportType
枚举,该属性和方法可以将Excel数据导入到应用程序中。
您不能继承两个不同的类,但是可以根据需要实现任意数量的接口。 您可以这样做:
interface DynamicImporter{
void importDynamicExcel(){
}
}
interface StaticImporter{
void importStaticExcel(){
}
}
然后,您的课程变为:
abstract class DynamicStaticImporter implements StaticImporter, StaticImporter{
}
如果您需要一些通用代码,也可以
abstract class AbstractImporter {
someMethod() {
}
}
在这种情况下,您的课程将变为:
abstract class DynamicStaticImporter extends AbstractImporter implements StaticImporter, StaticImporter{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.