结构java类(最佳实践)

结构java类(最佳实践),java,Java,我已经编写了一些Java类来导入Excel文件的内容 excel的内容主要有以下数据类型:静态、动态和静态-动态 问题是编写导入器类的最佳结构是什么。我需要导入动态、静态和动态静态内容的方法 我的想法如下: //Class to import dynamic content abstract class DynamicImporter{ void importDynamicExcel(){ } //class to import static content abstract class S

我已经编写了一些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数据导入应用程序的过程。

您不能继承两个disctinct类,但可以实现任意数量的接口。你可以这样做:

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{

}

Java中的继承意味着一次只能扩展一个类。但是,您可以实现多个接口..mybe是否有更多详细信息?为什么我需要这个接口?这样你就可以循环你的Excel导入程序,直到其中一个成功解析你的文档。为您提供了良好的封装。如何从DynamicStaticImporter导入/使用StaticImporter.importStaticExcel和DynamicImporter.importDynamicExcel?StaticImporter和DynamicImporter中没有代码,因为它们是接口。您将只使用DynamicStaticImporter方法,然后使用switch语句或类似的语句来处理每种情况。使用多态性可以为您提供更灵活的解决方案。@leftbit您似乎错过了我答案中的最后一句话。不,没有错过。按您的方式进行导入,最糟糕的情况是,根据导入类型和相关属性,导入程序将包含多个分支。如果保持导入器的公共界面精简,那么ImportType确实不能包含任何有用的方法。当然,您的替代方案会起作用,但它违反了关注点分离设计原则。