簡體   English   中英

如何實現@Singleton 注解?

[英]How can I implement @Singleton annotation?

可能是重復的問題。 但是我需要實現類似的東西

@Singleton
public class Person {
}

這將確保只有 Person object 的單個實例。

一種方法是將構造函數設為私有。 但這使得 Singleton 注釋變得多余。

我真的不明白我是否真的可以在不將構造函數設為私有的情況下將 object 的創建限制為單個 object。

這可能嗎?

沒有注釋可以阻止實例化類。 但是,如果您計划實現類似依賴注入框架的東西,或者只是一個簡單的對象工廠,那么您可以使用反射來讀取注釋並防止類被多次實例化,但我明白這不是您的答案正在尋找。

您實際上可以考慮放棄單例模式並轉向更現代的解決方案,例如適當的DI框架,這可以為您提供相同的結果 - 具有更大的靈活性。

public class ASingletonClass
{
    private static ASingletonClass instance = null;
    private ASingletonClass()
    {

    }

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

這是實現單例的正確方法。 注釋不能阻止人們調用公共構造函數。

您還可以使用類的延遲初始化。 示例代碼如下。

class LazyInitialization implements PrintStatement {
   private static LazyInitialization instance;

   private LazyInitialization() {

   }

   static LazyInitialization getInstance() {
     if (instance == null)
        instance = new LazyInitialization();

     return instance;
   }

   @Override
   public void print() {
      System.out.println("I am inside");
   }
}

最好有一個無狀態的 singleton:

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        return INSTANCE;
    }
}

暫無
暫無

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

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