這是我想知道該怎麼做,但找不到適合該問題的方式。實現一個對象,兩種目的
假設我有一個類可以用於兩個目的:上傳和下載。本能地,我會有點創建一個對象是這樣的:
public class File{
private FormFile uploadFile;
private File downloadFile;
private String uploadLocation;
private String downloadLocation;
//setters and getters
}
的事情是,我想只有一個set訪問爲每種類型的。例如,班級中只有一個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
我並不是真的想解決這個問題。只是一個想法。
其實這不是一個好的設計選擇。 _每個Class_的責任。所以你選擇分開下載和上傳類是好的。我看不到,爲什麼這應該更難保持? – Fildor
爲什麼不定義一個擴展File的類,然後讓它的構造函數在上傳或下載的時候會得到一個參數?但幾乎@Fildor說的是對的! –
查看維基百科上的[Cohesion頁面](http://en.wikipedia.org/wiki/Cohesion_(computer_science))。一個「模塊」(在這種情況下,一個類)應該只有一個責任。你的問題只會延伸到你的應用程序的其餘部分,因爲那時使用'File'的東西將不得不檢查它是什麼類型,強制使用它的任何地方的條件,因爲事情可能會根據它的類型做出不同的反應,並且會導致複雜和冗餘的代碼。分離關注點創建了一個更有凝聚力的模型。 – Brian