基本上我有一個類,其中一個實例是通過一個Singleton類創建的。該類不應該通過除了單例類之外的任何其他方式實例化。我的問題是,除了辛格爾頓之外,其他班級可以有效地「看不到」班級。隱藏其他類的類的可見性
我知道內部類和不同pacakages等會幫助,但我很好奇,看看有沒有人有一個很好的解決方案。
感謝回覆
基本上我有一個類,其中一個實例是通過一個Singleton類創建的。該類不應該通過除了單例類之外的任何其他方式實例化。我的問題是,除了辛格爾頓之外,其他班級可以有效地「看不到」班級。隱藏其他類的類的可見性
我知道內部類和不同pacakages等會幫助,但我很好奇,看看有沒有人有一個很好的解決方案。
感謝回覆
一個簡單而有效的方式做到辛格爾頓與枚舉:
public enum Singleton {
INSTANCE;
public void execute (String arg) {
//... perform operation here ...
}
}
只是重構類本身作爲單身。私有構造等
Java沒有「朋友」的概念像C++
你提到的嵌套類(真正的內部類是行不通的,因爲他們需要外)和包。
除了創建實例之外的其他類受保護的其他類未知。
但通常沒有理由通過輔助類來構建單例。
你可以使用枚舉或靜態最終建立單瓦爾
What is the best approach for using an Enum as a singleton in Java?
public enum Elvis implements HasAge {
INSTANCE;
private int age;
@Override
public int getAge() {
return age;
}
}
class X {
public static final X instance = new X();
private X() {
}
...
}
在一個示例場景,使用自己的API,我需要申報?:
ToBeInvisibleClass instance = TheSingleton.getThatInvisibleInstnace();
如果答案是是,然後回答你的問題是沒有,因爲我需要聲明一個變量和我需要的類型可見。如果答案是否,那麼使用內部/嵌套類似乎是一種正確的方法或使類本身是單身。
爲了確保實例只能通過你的類方法時,你可以做到以下幾點:
In this site有一個很好的例子:
public class MySingleton {
private static MySingleton _instance = new MySingleton();
private MySingleton() {
// construct object . . .
}
public static MySingleton getInstance() {
return _instance;
}
對不起人民不顧我的回答 - 我認爲這是C#,不是嗎? :) 沒關係 – NSGaga 2012-04-14 19:06:34