设计模式

单例模式(Singleton)

2020-07-18  本文已影响0人  秀儿2020

定义

保证一个类只有一个实例,并提供一个访问它的全局访问点。

把创建实例的权限收回,让类自身负责类实例的创建工作,然后由这个类来提供外部可以访问这个类实例的方法。

本质

控制实例数量

登场角色

单例模式的实现方式

饿汉式
/**
 * 饿汉式
 * 应用在创建和使用实例开销不大的场景
 */
public class Singleton1 {
    private Singleton1(){}
    public static Singleton1 singleton1 = new Singleton1();

    public static Singleton1 getInstance(){
        return singleton1;
    }
}
懒汉式
/**
 * 懒汉式
 * 创建开销较大,所以延迟实例化,在用到时才会去创建实例
 */
public class Singleton2 {
    private Singleton2(){}
    private static Singleton2 singleton2;
    //双重检查模式,弊端在于由于JVM的指令重排序,使得调用时可能会返回空对象
    public static Singleton2 getInstance(){
        if(singleton2 == null){
            synchronized (Singleton2.class){
                if(singleton2 == null){
                    singleton2 = new Singleton2();
                }
            }
        }
        return singleton2;
    }
}
静态内部类
/**
 * 静态内部类的实现方式
 */
public class Singleton3 {
    private Singleton3(){}
    private static class Singleton3Handler{
        private static Singleton3 singleton3 = new Singleton3();
    }
    public static Singleton3 getInstance(){
        return Singleton3Handler.singleton3;
    }
}
枚举
/**
 * 枚举
 */
public enum  Singleton4 {
    SINGLETON_4;
    public static Singleton4 getInstance(){
        return SINGLETON_4;
    }
}

功能

用来保证一个类在运行期间只有一个实例,并提供了一个全局的访问点。只关心类的创建问题。

何时使用

当需要控制一个类的实例只有一个时。

上一篇 下一篇

猜你喜欢

热点阅读