结构java类(最佳实践)
我已经编写了一些Java类来导入Excel文件的内容 excel的内容主要有以下数据类型:静态、动态和静态-动态 问题是编写导入器类的最佳结构是什么。我需要导入动态、静态和动态静态内容的方法 我的想法如下:结构java类(最佳实践),java,Java,我已经编写了一些Java类来导入Excel文件的内容 excel的内容主要有以下数据类型:静态、动态和静态-动态 问题是编写导入器类的最佳结构是什么。我需要导入动态、静态和动态静态内容的方法 我的想法如下: //Class to import dynamic content abstract class DynamicImporter{ void importDynamicExcel(){ } //class to import static content abstract class S
//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确实不能包含任何有用的方法。当然,您的替代方案会起作用,但它违反了关注点分离设计原则。