单例类设计问题 [重复]

Posted

技术标签:

【中文标题】单例类设计问题 [重复]【英文标题】:Singleton Class design Issues [duplicate] 【发布时间】:2013-05-06 17:04:04 【问题描述】:

下面是一个使用单例设计模式的类:

class Singleton

    private static Singleton instance;
    private Singleton()
    
        ...
    

    public static synchronized Singleton getInstance()
    
        if (instance == null)
            instance = new Singleton();

        return instance;
    
    ...
    public void doSomething()
    
        ... 
    

我想知道关于上述类的一些设计问题?为什么实例变量instance是私有的和静态的。我知道私有化使得实例变量只能被该特定类的对象访问,但它有什么帮助?

【问题讨论】:

添加了 Java,因为我不知道 c# 中的 synchronized 关键字。 真的需要惰性实例化吗? @NoobUnChained 我不同意这是一个骗局。他问的是这个特定的实现是否有什么问题,而不是单例的滥用会发生什么。 【参考方案1】:

如果它是public,每个人都可以使用Singleton.instance 并会抱怨,因为它是空的。使其私有强制他们使用getInstance(),这保证返回一个非空实例。

如果不是static,它就是Singleton的实例变量,因此你需要一个Singleton实例来访问唯一的Singleton实例,这没有多大意义。

【讨论】:

以上是关于单例类设计问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java设计模式-单例模式

设计模式---单例模式

JAVA设计模式单例模式

设计模式(创建型模式-单例模式)

设计模式系列篇——单例模式

设计模式-单例