单例模式

    科技2025-09-10  49

    目的:每一个设计模式都有自己的血泪史,都是前辈们总结起来的坑,曾经的坑是有些东西会频繁的用到,并且全局只能存在一个实例,单例模式应运而生。实现种类:饿汉式,懒汉式,双锁式(double check lock),静态内部类式,枚举类式实现: 饿汉式: class Single { private static Single instance=new Single(); private Single(){} public static Single getInstance() { return instance; } }

    类加载的装载阶段创造实例,对外只有get方法,线程安全

    懒汉式

    class SingletonLanHan { private static SingletonLanHan instance; private SingletonLanHan (){} public static SingletonLanHan getInstance() { if (instance == null) { instance = new SingletonLanHan(); } return instance; } }

    懒加载,第一次调用才实例化,非线程安全,可通过在get方法施加synchronized 锁实现线程安全

    双锁式

    class SingletonDCL{ private static SingletonDCL instance; private SingletonDCL(){ } public static SingletonDCL getInstance(){ if(instance==null) synchronized(SingletonDCL.class){ if(instance==null) instance=new SingletonDCL(); } return instance; } }

    判断为空,加锁,在判断为空,实例化 两次空判断,重要性,若不明白就想想,若没有其中一锁,试试 判断后加锁,保证了高性能,锁保证了线程安全

    静态内部类式

    class SingletonNel{ private static class Singleton{ private static final Singleton INSTANCE=new Singleton(); private Singleton(){} public static final Singleton getInstance(){ return Singleton.INSTANCE; } } }

    内部类保证了延迟初始化

    枚举类式

    enum Singleton{ INSTANCE; }

    就是这么简单,还线程安全,整挺好

    Processed: 0.010, SQL: 8