Java设计模式之单例模式-Singleton

本文详细介绍了单例模式的三种实现方式:懒汉式、饿汉式及静态内部类方式,并对比了它们之间的优缺点,特别强调了线程安全性和效率问题。


单例:顾名思义就是只有一个实例对象。

懒汉式(延时加载,只有用的时候才进行实例化对象,线程不安全)

public class OKHttpManager {
//懒汉式代码:线程不安全的
    //注意1.外界不能造对象,无参构造方法必须私有
    private OKHttpManager() {
    }
    //注意2.在类中创建一个本类对象,可以加final
    private static OKHttpManager okHttpManager = null;

    //注意3.提供一个公共的getInstance()方法(方法名可以任意取)
    // 通过OKHttpManager.getInstance()获取到该对象
    public static OKHttpManager getInstance() {
        if (okHttpManager == null) {
            okHttpManager = new OKHttpManager();
        }
        return okHttpManager;
    }
}

饿汉式 (初始化直接加载,对于频繁使用的对象建议对这个,线程安全,效率低)

public class OKHttpManager {
//饿汉式代码
    //注意1.外界不能造对象,无参构造方法必须私有
    private OKHttpManager() {
    }
    //注意2.在类中直接创建一个本类对象,可以加final
    private static OKHttpManager okHttpManager = new OKHttpManager();

    //注意3.提供一个公共的getInstance()方法(方法名可以任意取)
    // 通过OKHttpManager.getInstance()获取到该对象
    public static OKHttpManager getInstance() {
        return okHttpManager;
    }
}


推荐使用:静态内部类

public class OKHttpManager {
//静态内部类代码
    //注意1.外界不能造对象,无参构造方法必须私有
    private OKHttpManager() {
    }

    //注意2.创建一个私有的静态内部类,并(new)创建类的对象实例
    private static class OKHttpManagerHolder {
        private static final OKHttpManager okHttpManagr = new OKHttpManager();
    }

    //注意3.提供一个公共的get()方法(方法名可以任意取),返回静态内部类中的实例
    // 通过OKHttpManager.get()获取到该对象
    public static OKHttpManager get(){
        return OKHttpManagerHolder.okHttpManagr;
    }
}
此方法是结合了懒汉式的延时加载饿汉式的创建时的直接实例类对象避免的线程安全的问题

双重检验锁,静态内部类的写法

有关对以上代码的考虑线程安全等原因,可以参考这篇文章:http://blog.youkuaiyun.com/jason_996/article/details/78617592


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值