实现一个对象,两种目的

时间:2012-10-04 13:55:04

标签: java oop

这是我想知道怎么做的事情,但却找不到适合这个问题的方法。

假设我有一个可以用于两个目的的类:上传和下载。本能地,我会创建一个像这样的对象:

public class File{
 private FormFile uploadFile;
 private File downloadFile;
 private String uploadLocation;
 private String downloadLocation;

 //setters and getters
}

问题是,我希望每种类型只有一组访问器。例如,类中只有一个setFile(Object obj)。但这会导致问题,因为FormFile和File是两个不同的对象。

然后我会求助于OOP。将我的对象更改为:

public interface File{
 public void setFile(Object obj);
 public Object getFile();
 public void setLocation;
 public String getLocation;
}

然后创建另外两个对象:

public UploadFile implements File{
 private FormFile file;
 private String location;

 //implementation of methods
}

public Download implements File{
 private File file;
 private String location;

 //implementation of methods
}

如果您清理代码中的其他内容,这可能会有效。但我意识到事后这将更难维持。还有另一种解决方法吗?

喜欢

File file = new File.UPLOAD;

会将用户限制为:

仅使用方法setFile(FileForm file){ },然后setFile(File file){ }将无法使用。在实例化File file = new File.DOWNLOAD

时,反之亦然

我并不是真的想解决这个问题。只是一个想法。

3 个答案:

答案 0 :(得分:1)

尝试使用泛型:

public class File < T > {

    private T file;
    private String location;

    public T getFile() {
        return file;
    }
    public void setFile( T file ) {
        this.file = file;
    }

    public String getLocation() {
        return location;
    }
    public void setLocation( String location ) {
        this.location = location;
    }

}

用法:

File< FormFile > uploadFile = new File< FormFile >();
uploadFile.setFile( new FormFile() );

File< java.io.File > downloadFile = new File< java.io.File >();
downloadFile.setFile( new java.io.File( "something.txt" ) );

答案 1 :(得分:0)

你过分思考它。

只需添加以下两种方法:

public void setUploadFile(FormFile f);

public void setDownloadFile(File f);

答案 2 :(得分:0)

- Interface主要用于提供角色,或用于表示不断变化的行为,但是上传和下载是两回事,我不认为这里的界面是合适的。

- 尝试这样的事情......

文件类:

class File{

private String fileName;
private String fileLocation;

public File(String fileName, String fileLocation){

  this.fileName = fileName;
  this.fileLocation = fileLocation;

}
        //Getters for the above Field

public boolean setDownload(File f){

     new Download(f);   // Composition

 }

public boolean setUpload(File f){

      new Upload(f);   // Composition

 }
}

下载课程:

class Download{

private String fromDestination;

// Getter and Setter for above field

public boolean dowload(File f){


   return false;  // set to true if successful
 }

}

上传课程

class Upload{

private String toDestination;

// Getter and Setter for above field

public boolean upload(File f){


    return false;  // set to true if successful
 }

}

您可以使用Apache's commons库进行文件上传和文件下载 ....