2008-04-10

替换掉无齿的单例模式(Singleton)

关键字: singleton
单例模式(Singleton)
鼎鼎大名的Singleton模式,就是为了在一个JVM内只有一个实例对象存在.
public class SingletonClass {
    // 饿汉式单例模式
    private static SingletonClass action = new SingletonClass ();
    private SingletonClass () { }
    public static SingletonClass getInstance() {
        return action;
    }
}

上面就是Singleton模式的例子,用的人过于普遍了,也被人谴责了良多,下面就寻找一个新的模式,用于替换掉无齿的Singleton模式.

public abstract class SingletonClass {
	public static void method() {
		// noop
	}
}

就是上面的代码.

使用方法就是
SingletonClass.method();


我们也不需要下面这个构造函数了,下面的构造函数就是为了阻止new SingletonClass()操作,而我们的类本来就是abstract的,同样不允许new 操作.
   private SingletonClass () {
    }


当然,你可以对abstract的SingletonClass进行匿名实现,下面的操作是可行的,就会无法达到最终Singleton的目的.
SingletonClass one = new SingletonClass() { };

为了阻止上面的事情发生,你也完全可以把abstract修改成final的.

不过,使用abstract是有一定益处的,你可以让它被同样是abstract的类继承,从而得到更多特性.
public abstract class SingletonTwoClass extends SingletonClass {
	public static void method() {
	}
}

这样也是个不错的选择吧.

后记:从Spring的源代码中得到的方法.Spring真是一个大宝库.
评论
发表评论

您还没有登录,请登录后发表评论

lggege
搜索本博客
我的相册
49edb3d3-94ce-3f1d-b3b2-d2dd99204513-thumb
IndexCardGenerator
共 13 张
最近加入圈子
存档
最新评论