Seven common ways of writing the singleton design pattern

dumb bit 2022-08-06 15:32:43 阅读数:206

commonwayswritingsingletondesign

Seven common ways of writing the singleton design pattern

饿汉式:Singleton objects are created when the class is loaded

第一种:静态成员变量

public class Singleton {

//私有构造方法
private Singleton() {
}
//创建对象
private static Singleton instance = new Singleton();
//public get method
public static Singleton getInstance() {

return instance;
}
}

第二种:静态代码块

public class Singleton {

//私有构造方法
private Singleton() {
}
//声明
private static Singleton instance;
//在静态代码块中进行赋值
static {

instance = new Singleton();
}
//公共访问
public static Singleton getInstance() {

return instance;
}
}

饿汉式缺点:As long as class loading is done,对象就创建出来了,容易造成内存的浪费


懒汉式:首次使用该对象时才会创建

第三种:线程不安全的方式,Security issues arise in a multithreaded environment

public class Singleton {

//私有构造方法
private Singleton() {
}
//声明
private static Singleton instance;
//访问
public static Singleton getInstance() {

//保证单例
if (instance == null) {

instance = new Singleton();
}
return instance;
}
}

第四种:线程安全方式,加上synchronized修饰

public class Singleton {

//私有构造方法
private Singleton() {
}
//声明
private static Singleton instance;
//访问
public static synchronized Singleton getInstance() {

//保证单例
if (instance == null) {

instance = new Singleton();
}
return instance;
}
}

线程安全&&Disadvantages of thread unsafe method:Read operations are less efficient


第五种:双重检查锁方式

public class Singleton {

//私有构造方法
private Singleton() {
}
//volatile 保证有序性
private static volatile Singleton instance;
public static Singleton getInstance() {

//首先判断是否为空,不为空直接返回,Reduce unnecessary preemption of locks
if (instance == null) {

synchronized (Singleton.class) {

if (instance == null) {

instance = new Singleton();
}
}
}
return instance;
}
}

第六种:静态内部类方式

public class Singleton {

private Singleton() {
}
//静态内部类
private static class SingletonHolder {

private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {

return SingletonHolder.INSTANCE;
}
}

第七种:枚举方式

//就是这么简单
public enum Singleton {

INSTANCE;
}

OVER(∩_∩)O~

copyright:author[dumb bit],Please bring the original link to reprint, thank you. https://en.javamana.com/2022/218/202208061515004383.html