java - 文件阅读器的设计模式?

标签 java design-patterns

我正在创建一个使用 Apache POI 和 Opencsv 读取 CSV 和 Excel 文件的模块。

为了读取 CSV 文件,我创建了 1 个类和 2 个方法:

class CsvReader {
  void open() {//implementation}
  List<CsvDto1> get1() {//implementation}
  List<CsvDto2> get2() {//implementation}
  void close() {//implementation}
}

为了读取 Excel 文件,我还创建了 1 个类和 2 个方法:

class ExcelReader {
  void open() {//implementation}
  List<ExlDto1> get3() {//implementation}
  List<ExlDto2> get4() {//implementation}
  void close() {//implementation}
}

我想要的只是实现一种有助于将来维护的模式。所以我创建了一个名为 FileReadable 的接口(interface):

interface FileReadable {
  void open();
  List<CsvDto1> get1()
  List<CsvDto2> get2()
  List<ExlDto1> get3()
  List<ExlDto2> get4()
  void close();
}

然后 CsvReaderExcelReader 将从 FileRedable 实现。问题是 get1()get2() 存在于 CsvReader 中,但它们不存在于 ExcelReader 中,get3()get4() 存在于 ExcelReader 中,但它们不存在于 CsvReader 中。如何为这两个类创建通用的 read 方法,或者我们是否有针对这种情况的设计模式?

   interface FileReadable {
      void open();
      Reader read();
      void close();
   }

最佳答案

从您的问题中,我看到您有 Dto1Dto2。前缀 CsvExl 是实现的一部分,不应该是定义的一部分。您需要一个名为:

的接口(interface)
interface FileReadable {
  void open();
  List<Dto1> get1()
  List<Dto2> get2()
  void close();
}

然后您的客户将不会知道或关心它是否来自 ExlCsv。他们只会使用 Dto1Dto2。如果您确实需要知道来源,可以在 Dto 类中创建属性,该属性可以具有 EXCELCSV 等值。

关于java - 文件阅读器的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74268757/

相关文章:

design-patterns - 策略模式应该是无状态的吗?

javascript - 几乎完整的基于 JavaScript 的 Web 应用程序的架构?

design-patterns - 将存储库模式与文档数据库一起使用是否有意义?

Java反序列化: final variable value is not assigned

java - 从文本文件解析 JSON 数据

java - 在 Linux 下使用 java.nio.Files 更改文件所有者组

java - 使用 GWT 的 FlexTable 的鼠标悬停

c# - 异常处理的良好实践设计模式

design-patterns - 单一职责原则是否适用于功能?

java - web项目的eclipse-lib问题