2012-04-14 34 views
1

基本上我有一個類,其中一個實例是通過一個Singleton類創建的。該類不應該通過除了單例類之外的任何其他方式實例化。我的問題是,除了辛格爾頓之外,其他班級可以有效地「看不到」班級。隱藏其他類的類的可見性

我知道內部類和不同pacakages等會幫助,但我很好奇,看看有沒有人有一個很好的解決方案。

感謝回覆

+0

對不起人民不顧我的回答 - 我認爲這是C#,不是嗎? :) 沒關係 – NSGaga 2012-04-14 19:06:34

回答

1

一個簡單而有效的方式做到辛格爾頓與枚舉:

public enum Singleton { 
     INSTANCE; 
     public void execute (String arg) { 
      //... perform operation here ... 
     } 
} 
2

只是重構類本身作爲單身。私有構造等

1

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() { 
    } 
    ... 
} 
1

在一個示例場景,使用自己的API,我需要申報?:

ToBeInvisibleClass instance = TheSingleton.getThatInvisibleInstnace(); 

如果答案是,然後回答你的問題是沒有,因爲我需要聲明一個變量和我需要的類型可見。如果答案是,那麼使用內部/嵌套類似乎是一種正確的方法或使類本身是單身。

1

爲了確保實例只能通過你的類方法時,你可以做到以下幾點:

  • 使默認的構造函數私人
  • 保存您的單例實例在私有方法中
  • 使用公共靜態方法向客戶端提供實例:

In this site有一個很好的例子:

public class MySingleton { 
    private static MySingleton _instance = new MySingleton(); 

    private MySingleton() { 
     // construct object . . . 
    } 

    public static MySingleton getInstance() { 
     return _instance; 
    }