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

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


/**
 * 单例模式之饿汉模式(特点:一开始就创建)
 */
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值