1

基本上我有一个类,它的实例是通过 Singleton 类创建的。该类不应该通过单例类以外的任何其他方式实例化。我的问题是,除了 Singleton 之外,其他班级能否有效地“看不到”该班级。

我知道内部课程和不同的包装等会有所帮助,但我很想知道是否有人对此有很好的解决方案。

感谢您的回复

4

5 回答 5

2

只需将类本身重构为单例即可。私有构造函数等

于 2012-04-14T19:05:55.730 回答
1

Java 没有像 C++ 那样的“朋友”概念

您提到了嵌套类(真正的内部类不起作用,因为它们需要外部)和包。

我不知道保护其他类的其他方法,但一种是创建实例。

但总的来说,没有理由通过辅助类构建单例。

您可以使用枚举静态最终变量构建单例

在 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 () {
     }
     ...
}  
于 2012-04-14T19:07:54.590 回答
1

在示例场景中,使用您的 API,我需要声明吗?:

ToBeInvisibleClass instance = TheSingleton.getThatInvisibleInstnace();

如果答案是Yes,那么您的问题的答案是No因为我需要声明一个变量并且为此我需要类型可见。如果答案是No,那么使用内部/嵌套类似乎是一种正确的方法,或者使类本身成为单例。

于 2012-04-14T19:09:11.497 回答
1

使用枚举执行单例的一种简单有效的方法:

public enum Singleton {
        INSTANCE;
        public void execute (String arg) {
            //... perform operation here ...
        }
}
于 2012-04-14T19:09:23.490 回答
1

为确保仅通过您的类方法进行实例化,您可以执行以下操作:

  • 将默认构造函数设为私有
  • 将您的单例实例保存在私有方法中
  • 使用公共静态方法将实例提供给客户端:

在这个网站上有一个很好的例子:

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

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

    public static MySingleton getInstance() { 
        return _instance; 
    } 
于 2012-04-14T19:20:04.333 回答