[英]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.