这个静态类实现了什么样的模式?

时间:2011-06-06 21:30:46

标签: java design-patterns

package com.mycontainer;

public class MyContainer {
    private static ContainerConfig cConfig;

    private MyContainer() {

    }

    public static ContainerConfig getConfiguration() {      
        if (cConfig == null)            
            cConfig = new ContainerConfig();        
        return cConfig;
    }

}

4 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

我不得不说这是懒惰初始化和Singleton模式的糟糕实现。没有同步,因此没有线程安全。在访问此代码的多个线程下,您最终可能会有多个实例。

更新:最好是这样的代码:

package com.mycontainer;

public class MyContainer {
   // static final singleton object to rely on class loader to create it for you
   // in a thread safe way
   private static final ContainerConfig cConfig = new ContainerConfig();

   // private constructor to prevent instantiation
   private MyContainer() {}

   // getter method for your singleton object
   public static ContainerConfig getContainerConfig() {
      return cConfig;
   }
}

答案 2 :(得分:0)

这绝对是单身人士模式。

  • contructor是私有的,这意味着只有这个类可以实例化自己。
  • 方法getConfiguration()是静态的,它实例化了请求时返回的私有静态实例,这确保了在运行时只有该类的一个对象。

编辑:它可能是Singleton-FAIL,但它派生自Singleton。 ]

答案 3 :(得分:0)

延迟初始化。你需要延迟初始化,直到需要它为止。

请参阅http://www.javapractices.com/topic/TopicAction.do?Id=34