设计模式-单例模式

发布时间:2022-06-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了设计模式-单例模式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一个类只能有一个实例

主要有两种,饿汉和懒汉模式。

  • 饿汉: 直接初始化
  • 懒汉: 使用的时候才初始化
/**
 * @classname 单例模式
 * @Description TODO
 * @Date 2021/9/23 17:24
 * @Created by huangsm
 */
public class 单例模式 {
    /**
     * 一个类只能存在一个对象实例
     *
     * @param args
     */
    public static void main(String[] args) {
        //java代码典型使用,使用的是静态变量
        Runtime runtime = Runtime.getRuntime();
    }
}

/**
 * 饿汉模式(静态变量)
 */
class SingletonStatic {
    //通过静态变量直接初始化
    PRivate final static SingletonStatic instance = new SingletonStatic();

    //私有构造方法
    private SingletonStatic() {
    }

    //所有其他类通过此方法拿到静态变量
    public static SingletonStatic getInstance() {
        return instance;
    }
}

/**
 * 饿汉模式(静态代码块)
 */
class SingletonStaticBlock {
    //创建内部对象
    private static SingletonStaticBlock instance;

    //在静态代码块中创建单例对象
    static {
        instance = new SingletonStaticBlock();
    }

    //私有构造方法
    private SingletonStaticBlock() {
    }

    //所有其他类通过此方法拿到静态变量
    public static SingletonStaticBlock getInstance() {
        return instance;
    }
}

/**
 * 懒汉模式(线程不安全)
 */
class SingletonUnSafe {
    //创建内部对象
    private static SingletonUnSafe instance;

    //私有构造方法
    private SingletonUnSafe() {
    }

    //所有其他类通过此方法拿到静态变量
    public static SingletonUnSafe getInstance() {
        if (instance == null) {
            instance = new SingletonUnSafe();
        }
        return instance;
    }
}

/**
 * 懒汉模式(同步方法)
 */
class SingletonSync {
    //创建内部对象
    private static SingletonSync instance;

    //私有构造方法
    private SingletonSync() {
    }

    //所有其他类通过此方法拿到静态变量
    public static synchronized SingletonSync getInstance() {
        if (instance == null) {
            instance = new SingletonSync();
        }
        return instance;
    }
}

/**
 * 懒汉模式(同步代码块)
 */
class SingletonSyncBlock {
    //创建内部对象
    private static SingletonSyncBlock instance;

    //私有构造方法
    private SingletonSyncBlock() {
    }

    //所有其他类通过此方法拿到静态变量
    public static SingletonSyncBlock getInstance() {
        if (instance == null) {
            synchronized (SingletonSyncBlock.class) {
                instance = new SingletonSyncBlock();
            }
        }
        return instance;
    }
}

/**
 * 双重检查
 */
class SingletonDoubleCheck {
    //创建内部对象
    private static volatile SingletonDoubleCheck instance;

    //私有构造方法
    private SingletonDoubleCheck() {
    }

    //所有其他类通过此方法拿到静态变量
    public static SingletonDoubleCheck getInstance() {
        if (instance == null) {
            synchronized (SingletonSyncBlock.class) {
                if (instance == null) {
                    instance = new SingletonDoubleCheck();
                }
            }
        }
        return instance;
    }
}

/**
 * 静态内部类
 */
class SingletonStaticClass {
    //创建内部对象
    private static volatile SingletonStaticClass instance;

    //私有构造方法
    private SingletonStaticClass() {
    }

    //所有其他类通过此方法拿到静态变量
    public static SingletonStaticClass getInstance() {
        return Singleton.INSTANCE;
    }

    private static class Singleton {
        private static final SingletonStaticClass INSTANCE = new SingletonStaticClass();
    }
}

/**
 * 枚举类
 */
enum SingletonEnum {
    INSTANCE;
}

脚本宝典总结

以上是脚本宝典为你收集整理的设计模式-单例模式全部内容,希望文章能够帮你解决设计模式-单例模式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。