Java 最好的设计是对象可以不同,但​​做的事情是一样的

标签 java object design-patterns interface

基本上我需要有一个灵活的设计来处理。我正在考虑这样的事情:

  • 拥有一个接口(interface)DataProcessor,然后拥有不同类型的具体类,例如CSVDataProcessorFTPDataProcessorCloudDataProcessor
  • 所有 DataProcessor 类都将实现在 DataProcessor 接口(interface)上定义的方法 process()

我的问题是:

如果每个具体类需要不同的参数来执行 process() 方法,那么最好的设计应该是什么。例如,FTPDataProcessor 将需要文件、主机、端口等参数 - CSVDataProcessor 将需要文件位置,而架构 - CloudDataProcessor 将需要端点服务、用户、密码?

我的第一个想法是,使用构造函数将具体要求传递给每个具体类,但是如果需要的参数很多怎么办?

将来,将添加更多 DataProcessor 具体实现,这就是为什么我希望从一开始就有一个非常灵活的设计来实现它。

最佳答案

工厂设计模式

是您问题的答案。

DataProcessor p = ProcessorsFactory.getProcessor(yourParametersHere);

您应该重载您的工厂getProcessor()繁重的工作。最后,您的对象将仅了解 DataProcessor 接口(interface)和工厂,而不了解实现。这就是一项领先技术的工作原理: Spring Bean 工厂示例 http://javajadhav.blogspot.bg/2013/07/03-understanding-spring-bean-factory.html 所以你可以创建这样的东西。在 ProcessorsFactory 中,您可以从应用程序加载一些配置文件,并根据写入的属性来实例化适当的处理器实现。最后,您将仅使用您的interface.process + 配置文件。

关于Java 最好的设计是对象可以不同,但​​做的事情是一样的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43428821/

相关文章:

ios - 使用 Core Data 时如何 NSPredicate 建立一对一关系?

java - 泛型接口(interface)方法参数的实际类型

java - 你应该在java中创建一个Generic Singleton类吗?

java - 如何恢复 SWT 中小部件的默认键绑定(bind)(Ctrl+A、Ctrl+C 等)?

java - java.util.Optional<T> 映射函数是线程安全的吗?如果是,我该如何测试?

javascript - 不将函数声明为另一个自定义函数的原型(prototype)的用例?

java - 在Java中标记类的方法是框架私有(private)的

java - 为什么 Android Studio 不自动导入正确的包 android.support.v4.app.Fragment

java - GWT 鼠标悬停性能

java - Joshua Bloch 的有效 Java : Item1 - Static Factory Method