2

重构具有相同逻辑但使用不同类的方法的最佳方法是什么(在 Java 中)?比方说

Method1(FileInputStream obj, OutputStream o){
  //stuff
  while(something){
    //---
    //some code
    //---
    obj.read();
    //---
    //some code
    //---
    o.write(..);
    //code
  }
  //code
}

然后我有

Method2(InputStreamReader obj, OutputStreamWriter os){
  //stuff
  while(something){
    //---
    //some code
    //---
    obj.read(..);
    //---
    //some code
    //---
    os.write();
    //code
  }
  //code
}

一种方法处理二进制文件,另一种处理文本。理想情况下,我想要的是拥有一个读取-处理-写入并隐藏所有特定信息

4

2 回答 2

2

最好的方法是使用正确的接口:

void method2(Reader obj, Writer os){
   // code...   
}

然后像这样使用它InputStreams

method2(new InputStreamReader(fileInputStream), new OutputStreamWriter(outputstream));

为什么这样更好?

这更好,因为您正在抽象出该方法的工作方式。您是说您不在乎实现是什么,只要它符合Readeror Writer。因此,将 an 更改InputStream为 a是用户的责任Reader不是你的。如果有一个异常被抛出,那么你不需要捕捉它。它在客户端代码中抛出。这是一个重要的注意事项。

于 2012-09-05T17:58:06.917 回答
0

你不能读写相同的东西,所以它们除了名字之外没有任何共同之处。使它们通用的唯一方法是将二进制和文本编写为二进制,即无论如何它最终都变成了二进制。

于 2012-09-05T17:47:15.180 回答