单例模式(确保有且只有一个对象被创建)

源码地址 https://github.com/DingMouRen/DesignPattern
定义

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

使用场景

确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多资源。比如:访问IO和数据库等资源考虑用到单例模式。

协作

客户端只能通过Singleton的getInstance()方法获取到一个Singleton实例。

三种单例
//懒汉式:在第一次调用时才会进行初始化,缺点:每一次都会有同步的操作,如果调用频繁的话,这种做法会很消耗性能
public class Singleton1 {
    private static Singleton1 instance;
    private Singleton1(){}
    public static synchronized Singleton1 getInstance(){
        if (instance == null){
            instance = new Singleton1();
        }
        return instance;
    }
}
//饿汉式:会一直占用着资源
public class Singleton2 {
    private static final Singleton2 instance = new Singleton2();
    private Singleton2(){}
    public static Singleton2 getInstance(){
        return instance;
    }
}

/**
 * 双重检查锁,首先检查实例是否创建了,如果没有创建再进行同步。这样的话,
 * 只有在第一次调用的时候才会进行同步,这个方式适用于jdk1.5之后的版本
 */
public class Singleton3 {
    private volatile static Singleton3 instance;//volatile关键词确保:在instance变量被初始化Singleton实例时,多个线程正确的处理instance变量
    private Singleton3(){}
    public static Singleton3 getInstance(){
        if (instance == null){
            synchronized (Singleton3.class){
                if (instance == null) instance = new Singleton3();
            }
        }
        return instance;
    }
}

你可能感兴趣的:(单例模式(确保有且只有一个对象被创建))