一般取得自己的单一实例才使用private构造器,确保单一实例。而取得其他类的实例则不一定。比如AFactory要取得A的单一实例,在AFactory中确保A实例是一个静态变量并且只实例化一次就可以,而在程序中不要自己去new一个实例。AFactory不一定要private构造阿。

"哥白尼不是说地球是圆的被处死了吗"
应该是布鲁诺

的确,这里一直是技术开拓者与追随者争论的焦点,任何科学没有争论也就不是科学了。关键是在争论问题的同时,为了争论而争论的言辞,以及针对人的言辞,是每一个技术研究以及爱好者应该摒弃的以及极力避免的,对于真理的争论才是有意义的,这样让我们更能认识到整个思考过程以及科学研究方法。
每一种技术 比方说 singleton 都会有这样那样的局限性,也有这样那样的技术贡献,关键是如何在具体项目中应用正确,我觉得这才是正道。我是一个实际的人,觉得没有实际工作价值的东西,或者不能在实际工作中产生实际工作效率的东西,必然要被淘汰,或者进行进化,以适应市场的需要。singleton可能就是这样的一个例子,在某些场合中,随着系统的复杂化以及发展,可能不是太适合,需要使用其他的手段予以解决新暴露出来的问题。也有可能在一些项目中,确实产生的比较好的效果,但将来也有可能出现问题,但是任何技术总是会不断使用,然后问题暴露,变得不适应需求,而后改变,或者淘汰,这是一个规律。

看着楼上gigix和banq的争论,我觉得只是方向不同罢了。
不过对于gigix的论证我个人觉得有一些问题,比如说在J2EE范围下,许多模式就淘汰了。我不太理解这句话是什么意思。确切地说,不是这些模式被淘汰了,只是容器代替了这些工作而已,如果不用容器,不用IOC,难道就不是J2EE,或者还是说,容器实现的本身就没有用到过那些模式么?
模式,本身只是解决问题的一个固定的思路或者思维,滥用它自然是错误的,但是,说被淘汰就不太能理解了。我们只能说,在IOC容器的存在下,这些模式没有使用的必要而已。

>那好,我就发表点专业观点。我现在批评Azure_2003了:你的>application不能在0.5秒内响应请求,所以它实时性不强。你压根就不该>用什么J2EE做什么web application,你应该用VC来做,才能保证实时性>>呢。Azure_2003笑了:拜托,我的用户根本就不需要那么高的实时性啊。

>什么叫专业?作为职业软件开发者(而不是编程爱好者),满足用户的需>求就是最大的专业。人家Azure_2003的application在那边run了几个月,>用户100多天每天在那边用都没有抱怨,我们这些空口说白话的人倒在这
>里凭空抱怨,这难道是专业的态度吗?

呵呵 我觉得这个说得挺好

我觉得Singleton 模式对象如果是只读的我觉得就没什么,SPING 中的Singleton应该是和 web server 中的Application 一样,只是在这个范围中只有 一个对象,但是有一点,这样也可能引起多线程同步,死索等问题,所以我建议除非是无状态的可以用单列,省下的就不要用了.怪不的EJB中不支持Singleton...而是用了对象池.

class SingletonClass{
static methodA(){}
static methodB(){}
static methodC(){ X x = new X(); }
}

在Spring中生成这样一个Singleton的类会引起死锁么?会有性能问题么?
这正是Spring所建议使用单例的地方吧?

抱歉上面写错了。不是静态方法。
class SingletonClass{
methodA(){}
methodB(){}

}
这个类在Spring中配置成 singleton= true 会有什么性能问题么?那些不存在读写互斥的类都可以配置成singleton吧?
如果提供service的Bean中不保存状态,只是提供方法调用。那么这些方法都改成static的有什么不妥呢?那么Spring提供的单例也是多余的了么?
jdon上说Spring的singleton会有性能损失,是指的是生成singleton的lazy方式么?

“除非是无状态的可以用单列,省下的就不要用了”
――――――――――――――――――――――――――――――
最近和以前的同事,在MSN上也争论了Singleton的问题,不过他不用JAVA,用C#,做NET。呵呵,不也一样。C#,有Singleton关键字,用了一个Lock来锁定,是比较保险的Singleton,Java中很少有这么用,至少在我看到的Singleton实现中很少用到Lock的,那么是否是伪Singleton了?实际上简单pravate,能保证Singleton了?求证中.....
___________________________________________________________
“除非是无状态的可以用单列,省下的就不要用了”
VO,BO的问题,是VO,Singleton了还是BO了?场景了?Struts的Actionform 是VO,还是BO了?写如逻辑了?呵呵,一连串的思索!
――――――――――――――――――――――――――――――
如果照gigix所说,只是借用Singlonton之名,在DI一个VO或BO的时候?
――――――――――――――――――――――――――――――――
EJB3,不支持Singlonton,用对象池?可否讲的更深入了?
――――――――――――――――――――――――――――――――


从头看到尾,怎么可以有乱码出现呢?
不知banq哥有否解决
---------------------------------
无限的可能性 -- 语冰夏虫

虽然小弟我在IT行业里混得不久,但是觉得其实程序也要和生活关联起来。生活中的事物都有两面向,程序或者就是我们这个主题模式也有其两面性。用得好用得恰当的当然说他好了,用得不好的当然说其是垃圾啦!所以,没必要这样争论,把经验留给大家才是最重要的!不管是好的还是不好的!

我现在做的项目就使用了singleton模式呀,在index.jsp时装载一些系统元数据,以后再也不装载了 ^_^

HiveMind里面的一般的类都是单态的用其做IOC容器的系统会有什么隐患吗?并发量大时会有等待现象?

HiveMind里面的一般的类都是单态的用其做IOC容器的系统会有什么隐患吗?并发量大时会有等待现象?