日期:2014-05-20  浏览次数:20729 次

一个关于代码设计模式的问题
我有一个解压缩工具类,用来解压上传的文件。
public class FileUtils {

public static void unZip(InputStream is) throws Exception{

}

}

现在我想上传的是一个User实体,那么我需要在FileUtils的unZip方法里面使用到这个User对象,那我可以这样写
public class FileUtils {

public static void unZip(User user,InputStream is) throws Exception{

}

}

但是这个解压工具类不能仅仅局限于一种对象,将来我想上传一个Department实体就需要改代码或者是新添加一个方法。
  public static void unZip(Department department,InputStream is) throws Exception{

  }
所以把一个确定好的对象当成参数传过来不是一个好办法。
我应该怎样设计这个类,让他更加灵活呢,耦合度更低呢?

------解决方案--------------------
其实不需要这么麻烦。。。

压缩时:直接序列化后再进行压缩就行了。
解压时:压缩完毕然后反序列化。

类似于:
public static Object unZip(InputStream is) {
ZipInputStream zis = new ZipInputStream(is);
if (zis.getNextEntry() != null) {
return new ObjectInputStream(zis).readObject();
}
return null;
}
------解决方案--------------------
那就要看你的unZip方法需要User对象和Department对象来做什么了,看可不可以抽离出一个接口出来,方法只针对接口编译,这样就依赖于抽象了,比如说抽离出一个叫UnZipable的接口出来.
但可能不好这样抽离,那么就要看你需要User对象和Department对象的什么功能来完成你的unZip方法,关键是这