单例模式(饿汉模式和懒汉模式)

来源:互联网 发布:百家cms v4.1.4 编辑:程序博客网 时间:2024/04/28 22:23

最常见的单例模式应用:日志和数据库连接!


/** * 单例模式之饿汉模式(特点:一开始就创建) */public class Singleton1 {    /**     * 私有化构造方法,防止外部调用创建对象     */    private Singleton1() {    }    /** 类加载时就创建  */    private static final Singleton1 singleObj = new Singleton1();    /**     * 给外围提供统一获取对象入口     *      * @return     */    public static Singleton1 getIntance() {        return singleObj;    }}


/** * 单例模式之懒汉模式(特点:要用到的时候才创建) * 特殊点:当多线程的场合,一开始会创建多个对象,所以此场景下懒汉模式不适用 */public class Singleton2 {    /**     * 私有化构造方法,防止外部调用创建对象     */    private Singleton2() {    }    /** 初始化对象为空,当需要的时候再创建  */    private static final Singleton2 singleObj = null;    /**     * 给外围提供统一获取对象入口     *      * @return     */    public static Singleton2 getIntance() {        // 当对象为空的时候就创建        if (singleObj == null) {            return new Singleton2();        }        // 否则就直接返回        return singleObj;    }}


饿汉模式和懒汉模式的区别在于实例创建的时机,饿汉模式是在该类加载时即被创建,而懒汉模式则是在需要获取时才进行创建。


但是:懒汉模式只在单线程中适用,当在多线程时,都进行if判断时,就会产生多个该类的实例,就不符合单例模式的原则,也不符合程序的需要。


所以根据实际情况而使用相应的模式!




0 0
原创粉丝点击