单例类中成员的不同实例化

时间:2014-05-24 10:32:42

标签: java design-patterns singleton

正如标题所说,这是否有任何区别:

    public final class Foo {

        private static final Foo foo;

        private final ArrayList<String> text = new ArrayList<String>();
        //other members
        public static Foo getFooInstance(){
              if(foo == null)
              { 
                  foo = new Foo();
               }
              return foo;   
    }
       public ArrayList<String> getList(){
              return text;   
    }

 public final class Foo {

        private static final Foo foo = new Foo();
        private final ArrayList<String> text;
        private Foo(){
        //other members
         text = new ArrayList<String>();
        }

        public static Foo getFooInstance(){
              return foo;   
    }
     public ArrayList<String> getList(){
              return text;   
    }

我认为没有区别,更清楚的是,我发布了这个问题。

1 个答案:

答案 0 :(得分:2)

如何初始化最终实例成员?

两者都是final变量在构造函数中或在声明本身时初始化它的有效方法。

您可以使用另一种方法初始化initialization块中的最终实例变量。

示例代码:

public final class Foo {

    private final ArrayList<String> text;

    // initialization block
    {
       text = new ArrayList<String>();
    }

}

单身设计模式

SingletonGang of Four设计模式的一部分,它根据创作设计模式进行分类。

  • 您的第一个解决方案是使用懒惰初始化单例模式。使用双重检查锁定单例模式使其线程安全。

  • 在MultiThreading的情况下,您的第二个解决方案更安全,其中实例在声明本身时初始化。

详细了解Singleton Design Pattern – An Introspection w/ Best Practices