单利模式

适用场景

对于定义的一个类,在整个应用程序执行期间只有唯一的一个实例对象。

单利模式的分类

饿汉式:一开始就很饿,立马吃到肚子里。

懒汉式:当别人给我喂食时,我就张口吃掉。

两者的区别?

饿汉式:线程安全,由JVM保证。

懒汉式:线程不安全。

代码示例

饿汉式

//饿汉式单例类.在类初始化时,已经自行实例化 
public class Singleton1 {
    //私有的默认构造子
    private Singleton1() {}
    //已经自行实例化 
    private static final Singleton1 INSTANCE= new Singleton1();
    //静态工厂方法 
    public static Singleton1 getInstance() {
        return INSTANCE;
    }
}

懒汉式 (存在线程安全问题)

//懒汉式单例类.在第一次调用的时候实例化 
public class Singleton2 {
    //私有的默认构造子
    private Singleton2() {}

    //注意,这里没有final    
    private static Singleton2 single;

    //静态工厂方法 
    public static Singleton2 getInstance() {
         if (single == null) {  
             single = new Singleton2();
         }  
        return single;
    }
}

懒汉式 (存在线程安全问题)改进型1

  利用静态内部类特性实现外部类的单例,线程安全并且高效

public class Singleton3 {
    private static class SingleTonBuilder {
        private static Singleton3 singleTon = new Singleton3();
    }

    public static Singleton3 getInstance() {
        return SingleTonBuilder.singleTon;
    }   
}

  

不积跬步,无以至千里;不积小流,无以成江海。
原文地址:https://www.cnblogs.com/luao/p/14734987.html