2013-11-20 37 views

回答

0

工厂模式是用于创建对象的创建模式。 Singleton确保每个JVM只有一个类的实例可用。结合这两种模式将涉及使用AbstractFactory创建一个单例实例,这意味着Factory将返回相同的实例。其他答案都提供了代码

3

下面是一个类实现单例模式的示例。这个实现也是线程安全。它使用双选锁定以便只在需要时进行同步。

public class Singleton { 
    private volatile static Singleton instance; // Note volatile keyword. 

    private Singleton() {} 

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

您可以添加任何(工厂)方法作为类Singleton的成员。这些方法将在您获得唯一实例时可用。

public class Singleton { 
    /* ... */ 
    /* Singleton implementation */ 
    /* ... */ 

    public MyObject createMyObject() { // Factory method. 
     return new MyObject(); 
    } 

    // ... 
} 
+1

请注意,此方法的工作需要关键字“volatile”。如果可能,建议静态初始化变量以确保线程安全并且只有一个副本。私人静态最终单身实例=新单身人士()例如 – JustinKSU

+0

@JustinKSU如果知道应用程序将始终创建单身实例,那么你可以静态初始化'实例'。在我的例子中,实例只会在需要时创建(懒惰创建)。这可以节省一些不必要的创建开销。 – Snps

+0

同意。但是,通常我会在不需要时看到延迟初始化的开销。直到引用类时才会创建单个类,这通常是您希望变量初始化的时间。我的评论的主要观点是呼唤“易变”这个词。很多时候,我看到没有关键字的“双重检查锁定”。 – JustinKSU