2012-07-27 50 views
2

我可能錯了,因爲我沒有太多的Java經驗,但這裏有一個問題。我有一個包含很多方法(基本上它是一個簡單的庫)的類。對象與Java中的擴展

我創建這個類的一個對象,讓我們說MyLibrary obj = new MyLibrary(parameters);

參數設置任何必要的功能爲庫正常運行。

然後我可以叫obj.getSomething/obj.setSomething/obj.createSomething等等...

在我的主類我真的只需要一個這樣的庫的對象。

現在......對我來說,不要把它當作一個對象使用,而是把它作爲extends,然後在庫中創建一個函數,就像我手動調用的構造函數一樣?


編輯:

一類在MyLibrary之間的關係是非常密切的。基本上,我有很多類做類似的事情,但有一些不同的高層功能。所以我分開的方法,其中必須在所有這些類。

現在看來,這是非常相似的shape類和trianglecirclesquare例子。因此MyLibraryshape類似,其中包含所有的基礎。

回答

5

您所描述的內容與實用程序類別非常相似,與Java的Collections類似。該類只有static方法,並有一個私有構造函數來防止實例化。這是Java中一個衆所周知的慣用模式 - 您可以使用它來創建您自己的提供相關功能的方法組。

根本不應該擴展甚至實例化實用類。從Java-5開始,您可以靜態導入它們,以便您可以使用它們的方法而不必明確引用它們的類。

3

extends在您需要繼承層次結構時使用。將代碼放在兩個單獨的類中似乎更符合邏輯,就像現在一樣。另外,如果你的「庫類」做了多個不相關的事情,它應該被分成多個類 - 每個任務一個類。

3

你應該只使用extends當你有一個 is-a的關係。所以,你可以認爲,我的主類是MyLibrary,或者我的類是MyLibrary。

從你描述的問題來看,聽起來好像讓MyLibrary成爲了一條路。

0

由於您提供了有限的細節,因此您可能需要考慮Singleton pattern。當一個對象需要繼承另一個特點和功能,因爲他們的關係非常密切

extends,才應使用。舉例來說,如果你有一個Shape類,那麼你將延長Shape創建CircleSquareTriangle。您在使用前extends你應該瞭解的傳承,當你應該和不應該使用它。

0

我會做這個static類中使用。與javas MATH類API for math class類似。你可以使用這個類的方法而不用創建它的一個對象。

0

那麼如果你的類,如果執行的實用功能,那麼你應該標記所有方法爲static和使用操作,如

MyLibrary.doSomething(); 
MyLibrary.createSomething(); 
MyLibrary.getSomething(); 

但是,這不會讓你保持一些數據成員在類,如果你讓他們自己也將是靜態的。

我不這麼認爲extends適合你的情況。

此外,如果你想只保留一個對象,那麼你應該看看Singleton爲此可創建只有一個實例的類。

0

假設您只使用MyLibrary並且可能不會改變它,您應該使用一個使整個事物成爲Singleton的包裝器,正如Code-Guru已經提出的那樣。

public class MyLibraryWrapper { 
    private static MyLibrary instance = null; 

    private MyLibraryWrapper() {} 

    public static MyLibrary getInstance() { 
     if (instance == null) 
      instance = new MyLibrary(); 
     return instance; 

因此,在你的代碼,你會用

MyLibraryWrapper.getInstance().getSomething(); 
0

最好的方法在Java 1.5中創建單身以上是使用ENUM。

public enum Test { 
    INSTANCE; 
} 

INSTANCE是Test類的唯一實例。