时间:2010-07-23 15:07:55

标签: design-patterns singleton

13 个答案:

答案 0 :(得分:22)

答案 1 :(得分:5)

答案 2 :(得分:5)

Java Runnable Singleton Pattern 的最佳示例。如果您想添加一个不允许创建特定类的单个实例的限制,那么最好实现 Singleton Pattern 。 实施单身人士的关键点:

  • 私人构造函数
  • 静态私有实例 Singleton类本身的变量
  • 公共getter方法仅在第一次初始化上面的变量时,始终返回Singleton类的相同实例。

    class Singleton {
    
          private static Singleton instance;
    
          private Singleton(){
          }
    
          public static Singleton getInstance(){
             if(instance=null){
                instance=new Singleton();
             }
    
             return instance;
          }
          ........
        }
    

    对于线程安全:        需要同步getInstance()。

答案 3 :(得分:2)

答案 4 :(得分:1)

如上所述,单例模式的目的是确保实例化一个类的单个实例。

单例模式被认为是GOF pattern catalog中的“坏”模式之一,因为单例导致代码中的耦合并且难以对代码进行(单元)测试。后一点在(大多数)动态/松散类型语言中并非100%正确,因为您可以编写补丁代码。

让我们来看看耦合:使用Singleton的每个代码段都直接耦合到Singleton的实现。这很难/不可能模拟,因为Singletons经常用于基础设施服务,如数据库访问层,您要测试的单元与数据库访问层的具体实现相耦合。但是对于单元测试,您不想访问数据库,您希望拥有一些模拟数据访问层。你最终会问自己为什么使用单身模式。

我建议仅用于“简单”软件的单例模式,但我们都知道软件有增长的趋势。在几年后开始简单和结束复杂。

答案 5 :(得分:1)

如果您不想创建同一类型的多个实例,则需要使用单例。但是,如果使用静态类,则可以实现相同的目的。所以这里的重点是它不是唯一的一个实例,而是对实例创建的控制,从而避免了不必要的宝贵资源消耗。

答案 6 :(得分:1)

想想多个实例会出错的所有内容(不一致)。它可以是一个Application对象(应用程序的根对象)或应用程序范围的securityManager等。单例只是一种强制执行的方法,在类中只能有一个实例。

答案 7 :(得分:1)

The Singleton pattern is about to ensure a class has only one instance, and provide a global point of access to it.

答案 8 :(得分:0)

答案 9 :(得分:0)

当你只需要一个类中的一个实例时。最好的例子之一是记录器。你只需要一个实例。

答案 10 :(得分:0)

当系统中只需要一个类中的一个实例时,因为它只有一个实例,所以你可以严格决定用户如何访问它。

答案 11 :(得分:0)

  • 在软件工程中,单例模式是一种设计 将类的实例化限制为一个对象的模式 当只需要一个对象来协调
    时,这很有用 整个系统的行动。

  • 应用程序需要一个且只有一个对象的实例 此外,还需要延迟初始化和全局访问。

更多信息......

http://www.dzone.com/links/r/java_ee_singleton_design_pattern_introduction.html

答案 12 :(得分:0)

如果您只想强制在应用中创建的类的一个实例,则应使用单例模式。这可能是因为:

  • 创建此类对象是资源密集型的

  • 该对象是一个应用程序级对象;因此,拥有它们的多个实例是没有意义的。

因此,设计像单身人士这样的课是有道理的。有关更多信息,请参阅singleton design pattern explained with c# .net example