Java设计模式之单例模式

来源:互联网 发布:多源异构数据融合 编辑:程序博客网 时间:2024/06/06 07:13

单例模式存在的意义在于优化我们的程序性能,减少不必要的开辟内存。优化我们的代码结构,使调用方式更加方便与严谨,使业务逻辑更加集中化,可控化,使封装的思想得到更好的发挥。
单例模式的写法有很多种,在这里只介绍两种个人认为比较好的写法,只介绍多线程环境下的单例模式,能够抵抗复杂与高强度压力的代码才是好代码,当然,这也会使性能稍逊于普通环境下的单例模式。
模式一:

public class DBHelper {    private DBHelper() {    }    public final static DBHelper instance = new DBHelper();    public static DBHelper getInstance() {        return instance;    }}

以上为第一种模式,从代码可以看到,我们使用了final来修饰单例对象,这样使得在不管是不是在多线程环境下,这个单例的objet都只会创建一次。
模式二:

public class DBHelper {    private DBHelper() {    }    public static DBHelper getInstance() {        return SingleHolder.INSTANCE;    }    private final static class SingleHolder {        private final static DBHelper INSTANCE = new DBHelper();    }}

从代码可以看出,我们在一个静态final的holder类创建了一个静态final的单例对象,然后在获取的时候,直接使用这个静态final的holder类访问这个静态final单例,这样就实现了单例只会被创建一次。因为静态变量只有在第一次访问类的时候才会被加载,才会被实例化,这样就保证了只有获取单例的时候才会去实例,对比上面第一种模式,节省了性能。同时,我们使用了final和static修饰了单例持有类,静态类在多线程访问时是会互斥的,而且单例还使用了final进行修饰,很好的保证了多线程环境下的安全性。
以上即为单例模式的介绍。