簡體   English   中英

在 java 中創建主要 class 的 static 單格子是不好的編程習慣嗎?

[英]Is it bad programming practice to create a static singelton of main class in java?

我正在考慮使用 Singelton 設計模式並創建我的主要 class 的 Singelton。 當我在搜索時,我發現一些評論說這是相當糟糕的編程習慣,特別是因為 static 方法的聲明對面向對象編程不公平。 您對改進我的代碼有什么建議嗎?

public class MainClass {
private static MainClass instance = new MainClass();

public static MainClass getMainInstance() {
    return instance;
}

public static void main(String[] args) {
    MainClass main = Main.instance;
}
}

首先對於在 class 上實現的 singleton Object 必須包括以下內容。

  1. 它應該將所有構造函數標記為私有。
  2. 它應該具有 static 方法,該方法具有僅一次創建 object 的邏輯。
  3. 它應該有 static 參考 class 變量來保存單個可能的實例。

有了這些,我們可以確保 Singleton object,但這不是唯一的方法,因為我們可以使用創建設計模式或 Fly weight 設計模式來克服 static 方法調用。

關於 Static 關鍵字,它仍然使用 object 的 Class 實例。 As we all know any object have the equivalent Singleton class object that gets created on the heap during class loading process. 所以它並沒有超出 OOPS。

希望這可以幫助 !!!

雖然使用設計模式通常有助於清理編程,但在不必要的情況下過度使用它們會導致代碼過於復雜。

如果您想為您的應用程序創建一個 singleton,那么聲明一個 class 或更好的是一個包含將由您的主 ZC1C425268E68385D1AB5074C17A94F1 運行的應用程序的枚舉會更有益。

使用枚舉:

public enum Application{
    instance;

    public void run(){
    //do awesome stuff
    }
}

這樣做的效果是,即使通過序列化,應用程序也不能被復制,而且您也不能使用接口泛化您的應用程序。

當使用普通的 class 實現單例時,您需要將構造函數設為私有或保護 class 否則不會再次實例化。

使用帶有私有構造函數的普通 class :

public class Application{
    private static final Application instance = new Application();

    private Application(){}

    public Application getApplication(){
        return instance;
    }

    public void run(){
    //do awesome stuff
    }
}

這種變體的優點是 class 仍然可以實現接口或擴展類,例如 Runnable。 缺點是通過使用序列化 class 仍然可以多次實例化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM