2010-12-17 37 views
0

說你一個類ZipFile和一個類的內容。
ZipFile有一個load()方法用於讀取zip存檔中所有文件的內容並將其放入Content對象中。
什麼是最合適的面向對象設計?對象在不使用工廠設計時生成另一個對象是否乾淨?

1)ZipFile.load()將創建一個內容對象

class ZipFile 
{ 
    public function load() 
    { 
     // Load all files in zip 
     // ... 
     Content content = new Content(); 
     content->set(data); 
     return(content); 
    } 
} 
ZipFile zf = new ZipFile(); 
Content ct = zf->load(); 
ct->print(); 

b)給予的ZipFile構造一個內容對象以填充

class ZipFile 
{ 
    private Content content; 

    public function ZipFile(content) // constructor 
    { 
     this->content = content; 
    }  
    public function load() 
    { 
     // Load all files in zip 
     // ... 
     this->content->set(data); 
    } 
} 
Content ct = new Content(); 
ZipFile zf = new ZipFile(ct); 
zf->load(); 
ct->print(); 

基本上,是更好分離對象(鬆耦合)? 作爲一個老派程序員,我不能停止質疑面向對象設計的幾種方法。我對「什麼是最好的方式來OOP這個。任何意見,認爲它通過?書?網站失去了很多的時間?

感謝您的幫助

+0

你爲什麼不把'Content'對象賦給'load'函數而不是構造函數?那會更像第一個例子。 – lijie 2010-12-17 18:17:51

+0

內容可能被視爲ZipFile的一部分,因爲每個ZipFile都有一個內容,所以我把它給了構造函數。但我的問題更多的是關於每種解決方案的優點和缺點。 – Antoine 2010-12-17 18:23:27

回答

2

爲兩種情況的概括是不同的:

第一種情況推廣到ZipFile知道具體類的它的內容,並返回一個接口的一些實施

第二種情況推廣到ZipFile知道一個接口,用於其內容,並接收concre。 te類(以後初始化??)。

換句話說,第一個案例夫婦ZipFile以及任何具體的內容類別。第二對夫婦ZipFile的客戶和具體內容類。

鑑於ZipFile很可能與其內容的具體具體類別相關,所以第一個泛化可能是更自然的一個。

相關問題