关于这个,单例模式?

         
linhui
08-03-31 3 673

今天看到一个老员工写的,觉得怪怪的,又想不出哪里不对劲,发上来看看:

public class DaoMenuApp {
public static DaoMenuApp INSTANCE = new DaoMenuApp();

........
}

使用
public class Test {
public void test() {
DaoMenuApp dao = DaoMenuApp.INSTANCE;

dao......;
}
}

请教banq大哥,这个是否也是属于饿汉式单例模式呢?如果是,那个实现更好?

banq
2008-04-01 17:50

单例模式不能用,尽量不要用,都可以使用其他方式替代,所以,也就没有必要讨论它具体形式,都不是好东西,:)

linhui
2008-04-01 19:09

谢谢banq大哥回复

我曾看过一点点spring的源代码,好像容器管理的对象只有一个,每次使用的都是同一个对象,而不是再创建对象,那这种由容器管理的单个对象不属于单例模式么?(包括jdon使用的picocontainer也是这样的吧)

如果不使用单例,那如果并发量高的话,而且对象又很费时间创建,会不会造成大量的对象生成和创建?这样岂不是即耗时间又浪费内存?一般对单例模式的替代是不是用缓冲池之类的东西来实现,那这样跟单例模式的设计思想也没多大区别吧

ps:banq大哥你真是太热情了,有问必答。还有今天去下picocontainer升级2.1,改动了很多东西,jdon是不是也跟着升级的准备?

banq
2008-04-02 19:12

Spring的单例其实不同于我们上面我们讨论的单例,这个单例是由生命周期的,就是Application,和当前Web项目同周期,会随着项目的undeploy而消亡

而前面讨论的单例的生命周期则是同JVM级别,也就是永恒的,万岁的。

pico升级是好事,Jdon框架只是用它的一部分底层功能,其实省却我来重新开发,并不依赖它,其实Jdon框架相比grails又算底层了,所以,目前还需要在Jdon框架上再抽象,下面就不用太在意了