Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在我的项目中组织读/写操作的更好方法_Java_Design Patterns - Fatal编程技术网

Java 在我的项目中组织读/写操作的更好方法

Java 在我的项目中组织读/写操作的更好方法,java,design-patterns,Java,Design Patterns,我的代码包含以下将数据写入数据库的读/写方法 读取类似的方法 公共字节[]读取文件(arg1) 公共字节[]读取文件(arg1、arg2) 公共输入流读取文件(arg1、arg2) 公共MyStream读取文件(arg1、arg2) 公共字节[]读取文件(arg1、arg2、arg3) 编写类似的方法 公共字符串[]写文件(arg1) 公共字符串[]写文件(arg1、arg2) 公共MyStream writeFile(arg1,arg2)->文件是从这个输出流写入的 公共字符串[]写文件(ar

我的代码包含以下将数据写入数据库的读/写方法

读取类似的方法

  • 公共字节[]读取文件(arg1)
  • 公共字节[]读取文件(arg1、arg2)
  • 公共输入流读取文件(arg1、arg2)
  • 公共MyStream读取文件(arg1、arg2)
  • 公共字节[]读取文件(arg1、arg2、arg3)
  • 编写类似的方法

  • 公共字符串[]写文件(arg1)
  • 公共字符串[]写文件(arg1、arg2)
  • 公共MyStream writeFile(arg1,arg2)->文件是从这个输出流写入的
  • 公共字符串[]写文件(arg1、arg2、arg3)
  • 各种类别的访问这些方法用于读写目的。请为我提供一个更好的方式来组织这个更好的方式

    我希望有一个集中的部分,我所有的读/写将发生


    有人请帮我选择一个合适的模式来组织好这件事。

    你可以这样做:

    interface DatabaseServices {
      ... listing all the methods that you want to "combine"
    
    class  DatabaseServicesImpl implements DatabaseServices {
      ... implementing all those methods
    
    enum DatabaseServicesProvider implements DatabaseServices {
      INSTANCE;
      private final DatabaseServices impl = new DatabaseServicesImpl(...
      ... forwarding all service calls to the impl object
    
    上面的优点是它是“完全”单元可测试的(如果您只是创建一个枚举并在其上放置方法,那么您就无法测试使用该枚举的客户机)

    从这里开始,您进入您现有的源代码,扔掉当前访问数据库的所有方法;用像这样的电话代替它们

    DatabaseServices services = DatabaseServicesProvider.INSTANCE;
    ...
    services.whatever()
    

    其中:“枚举部分”在某种程度上是可选的。但是,您经常会发现,您希望这种与数据库相关的服务成为中央权威(换句话说:一个单例)。Enum只是为“全局”方面提供了一个好的、干净的解决方案。如果你不需要一个中心实例(这实际上是一件更好的事情),那就忘了这一部分。

    你的方法是在内部同步的吗?不,Coderino Javarino,它们不是调用这些方法的类,它们遵循单例模式。因此,我认为它们不需要同步。我清楚了吗?Jägermeister我不清楚代码的枚举部分。如果你能再多给我解释一点,我会很有帮助的1.我有点怀疑。。请向我澄清以下内容,以便我能将你的回答标记为已接受。。在上面的示例中,相对于类使用enum有什么优势?要访问这个枚举方法,我们必须像
    enumName.INSTANCE.methodName()
    那样,而如果我们在上面的示例中使用class,我们可以访问像
    classObj.methodName()
    这样的方法。。。哪一个是有效的
    class
    enum
    以及为什么?您根本不关心这里的效率。这都是关于“可读性”和设计方面的。如果有差异的话,它们将在纳秒范围内。在这里,你不应该浪费一秒钟去思考性能。