2010-12-10 112 views
2

我正在創建一個小項目,它將操縱項目的一些內部組件(大項目)。Java設計/實現問題

現在,每個組件都以自己的方式做了某些事情,但其基本上是一樣的。例如: 每個組件都可以刪除存儲在其中的臨時文件。但是每個臨時文件都是不同的類型,比如在組件1中,臨時文件是Object1類型,在另一個組件中是Objectx等。

所以我創建了一個名爲Manager的類,它包含像delete這樣的方法,將會有componentManager擴展Manager類併爲其中的方法提供實現。

我應該讓經理抽象嗎?小問題,可以說經理有這兩種方法。

public void delete(Object1 obj){ 
} 

public void delete(Objectx obj){ 
} 

Component1將使用第一次刪除,其他一些組件將使用其他刪除。

或者我應該單獨實施它們而不必延長同一班級嗎?

什麼將是很好的方式來實現這一點?謝謝

+0

我認爲要記住,使用重載的方法具有相同的參數編號並不是最佳實踐:http://www.javapractices.com/topic/TopicAction.do?Id= 119 – PeterMmm 2010-12-10 11:00:21

回答

4

我想你應該與方法

public void delete() 

和你的對象Object1,...,目標x應該實現它創建一個接口可刪除。您的經理可以採用以下方法:

public void delete(Deleteable obj) { 
    obj.delete(); 
} 
1

我不確定您是否以此方式表示我理解您。 例如Component1只有Object1文件,而Component2有onyl Object2文件?

我不確定您的解決方案,如果您的意思是像我想的那樣,那麼泛型又如何?

interface Component<T extends YourObjectsAncestor> { 
    void delete(T t); 
} 

class Component1 implements Component<Object1> { 
    public void delete(Object1 t) { 
    } 
} 

class Component2 implements Component<Object2> { 
    public void delete(Object2 t) { 
    } 
} 

注意,這種方法將是唯一的在每個分量應該綁定到一個concnrete「文件」有用(如你把它命名爲)。例如Component1只有Object1類型的文件等等..