singleton 的第三种形式

03-10-22 swingseagull
刚才在浏览设计模式的分析时谈到了singleton的两种形式,我有时采用下面的这种形式,算不算第三种方式呢?提出来供大家讨论

public class Singleton {
  private static Singleton instance = null;

  //只在第一次被引用时生成,效率与第二种形式是一样的
static {
instance = new Singleton();
}
  
static Singleton getInstance() {

  return instance;   
}

}

banq
2003-10-23 15:55
应该是第一种的不同写法。

Fish
2003-10-24 20:43
楼主: 

您的这种写法不对。 最起码你的这个类的构造方法应该是私有的。 不然客户端完全可以new一个出来,而不用getInstance() 方法得到实例。
如果new一个的话,那产生的就不只一个对象了。 

dreamaster
2003-10-27 08:38
这种实现方法是允许new操作的,注意代码中的方法和变量都定义成了static.

zingers
2003-10-27 21:46
我觉得只要用一种懒汉式实现就够了,方法不是讲究多,而是讲究解决问题的。
如果你要有其它功能,比如你说的可以NEW,那就不要把它往单例模式中套,
还有一个错误,单子模式有两个类,命名范式可以是SomethingSingleton,Something,像楼主这样把他们同一化不好。

Fish
2003-10-31 13:39
不对,这种写法如果用new操作的话会产生多个实例,与单例原则相违背。所以这种写法必须由程序员自觉使用getInstance方法返回实例。不能度绝使用new来创建,显然不好

blureyes
2003-11-05 17:45
singleton is evil.
在设计中能少用就要尽量少用singleton,尤其在j2ee开发中。
1)降低性能
2)有可能会造成lock

crogers
2003-11-05 18:41
singleton is evil?
呵呵,我这个系统所有的请求都通过singleton转发来完成的
好像没有发现evil啊?

blureyes
2003-11-06 09:35
可能你的系统还没达到一定的规模。

crogers
2003-11-06 09:39
www.sz1000.com
这个系统没有达到规模的话,我也没办法了
还有一个内部系统,一小时内统计过到14000个通过singleton的操作的
还是没有达到规模,更加是没有办法了...