这里有正在显示三个概念:
Tester类:
if (instance == null)
instance = new tester();
当您希望控制对象的构造时使用。变量instance
控制是否new Tester()
将由boot()
调用。
这可以用来实现Lazy Initialization。这是延迟对象构造直到需要时的做法。它通常用于建筑既昂贵又不总是需要的情况。这里被推迟到boot()
被调用。延迟初始化不仅用于单身人士。 Some认为在Java中使用Lazy Initialization创建singleton
实际上是错误的,因为类加载器的工作方式。他们声称这是一个从C++移植过来的习惯。作为一种模式,单身人士已经有足够的争议,some call it an anti pattern。
Tester类:
public static tester instance;
boot()
,构建了一个Tester
对象,设置instance
到该对象(注:tester
应该是大写)。 instance
,其类型为Tester, resides in the
测试仪class means that
测试仪is [**self referential**][7], like the nodes in a linked list. But, unlike nodes, because
实例is
静态, all
测试仪objects have the same copy of
实例`。
因为开机从不把它构建了任何地方,但在instance
,只有一个boot()
构建Tester
对象曾经存在于任何时候,只要instance
是从来没有在任何地方复制。很容易,因为它是public
。
只要instance
是从来没有设置回null
boot()
将构造一个Tester
只有一次,不管它是如何调用的次数。由于instance
是public
它可以随时通过知道Tester
的任何事情设置为null
。这样做会允许boot()
再次构建,旧的Tester
对象将被遗忘(垃圾收集)。
由于Tester
小号构造尚未取得private
没有说Tester
永远不会被比boot()
其他东西构成担保。这意味着仍可能有许多Tester
对象在运行。但他们都有一个instance
在他们可能会或可能不是他们自己。
一个典型的单例会有延迟初始化,是自引用的,并且被封装在最多只有一个Tester
对象永远存在的地方。然而,这里没有什么证明这本来就是一个单身人士。这可能是一个建设优化失去了可怕的错误。
仅用于创建对象实例的方法(除构造函数外)或对象称为*工厂*。 – Raedwald 2014-12-07 08:38:46
您应该发布编译成功的简短代码示例。 – PeterMmm 2014-12-07 08:41:31