精华帖 (0) :: 良好帖 (0) :: 新手帖 (16) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-10-24
做实验了没? 确定是lazy?
|
|
返回顶楼 | |
发表时间:2012-10-24
单例模式最简单,但是最容易出错的模式
|
|
返回顶楼 | |
发表时间:2012-10-24
zhukewen_java 写道 LZ上的一段代码不简洁,冗余。
这样更好: public class Singleton { public static Singleton getInstance() { return SingletonLazy.lazy; } private static class SingletonLazy { public static Singleton lazy = new Singleton(); } } 一般都用这种方法的 |
|
返回顶楼 | |
发表时间:2012-10-24
我还是喜欢饿汉式。
|
|
返回顶楼 | |
发表时间:2012-10-24
少年,太会玩了。。。
比起这个,记得加上private的构造函数 |
|
返回顶楼 | |
发表时间:2012-10-25
hgpeng 写道 zhukewen_java 写道 LZ上的一段代码不简洁,冗余。
这样更好: public class Singleton { public static Singleton getInstance() { return SingletonLazy.lazy; } private static class SingletonLazy { public static Singleton lazy = new Singleton(); } } 一般都用这种方法的 正解。《Effective Java中文版》第9章166页的标准代码,原文中称这个是“按需初始化容器类”(initialize-on-demand holder class)模式。 |
|
返回顶楼 | |
发表时间:2012-10-29
dohkoos 写道 没看出哪边lazy了,难道是有个lazy名字就lazy了?
其实是lazy。但真正的我想表达的是相比以下这段代码它lazy了吗? instance = new Instance(); 这段代码也是在instance为null时创建一个实例,而且也不必像lz的代码那样再去加载一个类。 那么,lz代码的优势在哪里?不会出现同步问题,不知是不是classloader加载类时是单线程的。离看《Effective java》的时间太遥远了,要再去温习下了。 |
|
返回顶楼 | |
发表时间:2013-07-07
单例模式最佳实现:
public class Singleton { // Private constructor prevents instantiation from other classes private Singleton() { } /** * SingletonHolder is loaded on the first execution of Singleton.getInstance() * or the first access to SingletonHolder.INSTANCE, not before. */ private static class SingletonHolder { public static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } } 出处: http://en.wikipedia.org/wiki/Singleton_pattern |
|
返回顶楼 | |