结构java类(最佳实践)

时间:2018-02-05 13:31:14

标签: java

我编写了一些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{

}

任何想法可以替代解决此类问题?

4 个答案:

答案 0 :(得分:1)

使用ExcelImporter界面,AbstractExcelImporter共享代码和您需要的三种实现。

答案 1 :(得分:0)

您将需要一个具有共享实现的抽象类。不需要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 
   }
}

答案 2 :(得分:0)

在多重继承上实现调度的另一种方法是将层次结构展平为单个类,并为其提供一个方法,该方法将描述要执行的导入类型(静态,动态等)作为其参数:

enum ImportType {
    STATIC
,   DYNAMIC
,   STATIC_DYNAMIC
}

class Importer {
    void importExcel(ImportType impType) {
        ...
    }
}

反过来ImportType枚举可以通过指向将Excel数据导入应用程序的过程的属性和方法来增强。

答案 3 :(得分:0)

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

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{

}