关于singleton模式的一个问题?

02-12-04 追风
如果一个类实现了singleton模式,那么在使用时只要简单的调用ClassName.getInstance()就可以了,可是如果一个项目中有很多地方会用到这个类,每次使用时都是通过ClassName.getInstance()来得到,那么是不是使用的有些不当?

banq
2002-12-04 12:00
完全正确 ,这属于过渡使用singleton ,

因为使用singleton会给程序运行调试带来方便,都是单线程,唯一的,单用户的DEMO版是容易做的。

过渡使用的缺点很现显然,系统性能大幅度下降。

zingers
2002-12-04 17:31
我来说一句,不要说效率,可用性都是问题。比如在数据库操作中,把DataSource设为Static ,其实就是单子,你会发现2个以上的request就无法使用。

追风
2002-12-05 08:31
可是一个项目中的确有很多类需要一个对象就足够了,该怎么办?另外一个类如果所有方法都是静态方法,那么它和单态模式有什么不同,哪一个更好?

banq
2002-12-05 20:51
static 不彻底,只是方法或变量的唯一。singleton比较彻底

追风
2002-12-06 08:49
只要构造方法改为private,效果不就一样了吗。

另外有个问题顺便也请教一下banq大哥,我在一个stateless bean中调了一个普通类的静态方法,然后在该方法中访问数据库,由于ejb中容器会实现同步方法,那是不是我在普通类中的静态方法就不需要同步了?

banq
2002-12-07 13:09
我感觉你使用EJB调用外部的static方法,这种做法不好,至少应该是final static方法。

还有,为什么不使用session直接访问数据库?通过entity bean也可以啊。你这样做后患很多。

因为我没这么做过,所以没法回答是否需要同步。

sonata
2002-12-21 11:30
不懂。有什么过度使用啊?单体类就是要这么用啊。

Datasource就是要搞成单体啊,除非非常非常特殊的应用。

静态sql方法非常的不可取,推荐看看<java高效编程指南><java2核心技术 I>

wy0502
2002-12-23 16:31
我感觉这样使用singleton没问题,如果你是在不用的jvm中使用有状态的singleton会出现问题。欢迎讨论。

猜你喜欢