我有一个解压缩工具类,用来解压上传的文件。
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{

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

解决方案 »

  1.   

    其实不需要这么麻烦压缩时:直接序列化后再进行压缩就行了。
    解压时:压缩完毕然后反序列化。类似于:
    public static Object unZip(InputStream is) {
      ZipInputStream zis = new ZipInputStream(is);
      if (zis.getNextEntry() != null) {
          return new ObjectInputStream(zis).readObject();
      }
      return null;
    }
      

  2.   

    那就要看你的unZip方法需要User对象和Department对象来做什么了,看可不可以抽离出一个接口出来,方法只针对接口编译,这样就依赖于抽象了,比如说抽离出一个叫UnZipable的接口出来.
    但可能不好这样抽离,那么就要看你需要User对象和Department对象的什么功能来完成你的unZip方法,关键是这
      

  3.   

    找到办法了。
    User和Department都是实体类,实现接口就是去意义了。
    我在
    public static void unZip(InputStream is) throws Exception{
           //抽象的
           doZipEntry();
    }
    这个方法里搞了两个抽象方法然后写GameUnZip类继承这个类,自己实现doZipEntry就好了。