Java23种设计模式——单例模式

该系列文章为博主学习笔记,原文请参考参考链接
本文禁止转载,但是欢迎大家留言区留言交流[微笑]

理(面)解(试)单例模式:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

饿汉式:

//饿汉式
//类被加载时就将自己实例化,它的优点在于无须考虑多线程访问问题,可以确
//保实例的唯一性
//从调用速度和反应时间角度来讲,由于单例对象一开始就得以创建,因此要优
//于懒汉式单例
//由于在类加载时该对象就需要创建,因此从资源利用效率角度来讲,饿汉式单
//例不及懒汉式单例
public class EagerSingleton {
    private static final EagerSingleton eagerSingleton=new EagerSingleton();
    private EagerSingleton(){}

    public static EagerSingleton getEagerSingleton() {
        return eagerSingleton;
    }
}

Java23种设计模式——单例模式_第1张图片

懒汉式:

//懒汉式
//在第一次使用时创建,无须一直占用系统资源
public class LazySingleton {
    private volatile static  LazySingleton lazySingleton = null;

    private LazySingleton(){}

    public static LazySingleton getLazySingleton() {
        if (lazySingleton == null) {
            synchronized (LazySingleton.class) {
                if (lazySingleton == null) {
                    lazySingleton = new LazySingleton();
                }
            }
        }
        return lazySingleton;
    }
}

Java23种设计模式——单例模式_第2张图片

这里面一定要加上volatile这个关键字,该关键字的思想是happen-before规则

loDH:

//IoDH
//结合了懒汉式和饿汉式的优点
public class Singleton {
    private Singleton(){}

    private static class HolderClass{
        private static final Singleton singleton=new Singleton();
    }

    public static Singleton getSingleton() {
        return HolderClass.singleton;
    }
}

微信公众号:
Java23种设计模式——单例模式_第3张图片

QQ群:365473065

你可能感兴趣的:(Java设计模式)