精通23种设计模式——单例模式

来源:互联网 发布:优化排名软件 编辑:程序博客网 时间:2024/06/06 02:00

单例模式

简单的说,把类的构造函数私有化,就是单例模式。

public void Singleton{    private static final Singleton singleton = new Singleton();    private Singleton(){    }    public Singleton getInstance(){        return singleton;    }}

这是一种被称为饿汉式的单例模式,这种方式并不需要考虑多线程的问题。

还有一种创建单例模式的写法,就要小心多线程的问题了。

public void Singleton{    private static final Singleton singleton = null;    private Singleton(){    }    public Singleton getInstance(){        if(singleton == null)            singleton = new Singleton();        return singleton;    }}

这种写法被称为懒汉式(不要问我为什么叫懒汉式、饿汉式!)
这种写法要注意多线程的问题了,如果线程A在执行完singleton == null的判断时,还未来及创建singleton,此时CPU控制权被线程B获取,线程B成功创建singleton后,释放了控制权,线程A重新获得控制权,那么此时线程A会继续执行并创建singleton。此时内存中会存在两个singleton的实例。
那么单例模式有啥用处呢?
如果在系统中,需要频繁的创建和销毁对象,会对系统资源造成极大的浪费。那么此时,就可以使用单例模式,创建一个实例对象,使它长期驻存在内存中。

0 0