一、基本概念
单例模式:确保一个类只有一个实例,并提供一个全局访问点
二、普通单例模式
package com.jackeys.Singleton;
/**
* @Description: 普通单例模式
* @ClassName: Singleton
* @Package com.jackeys.Singleton.common
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/18 11:43
* @Version: 1.0
*/
public class Singleton {
private static Singleton singleton;
private Singleton() {
}
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
三、同步单例模式
package com.jackeys.Singleton;
/**
* @Description: 同步单例模式
* @ClassName: SingletonSynchronized
* @Package com.jackeys.Singleton
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/18 12:49
* @Version: 1.0
*/
public class SingletonSynchronized {
private static SingletonSynchronized singleton;
private SingletonSynchronized() {
}
public synchronized static SingletonSynchronized getInstance() {
if (singleton == null) {
singleton = new SingletonSynchronized();
}
return singleton;
}
}
四、静态单例模式
package com.jackeys.Singleton;
/**
* @Description: 静态单例模式
* @ClassName: SingletonStatic
* @Package com.jackeys.Singleton
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/18 12:51
* @Version: 1.0
*/
public class SingletonStatic {
private static SingletonStatic singleton;
private SingletonStatic() {
}
public static SingletonStatic getInstance() {
return singleton;
}
}
五、双检锁单例模式
package com.jackeys.Singleton;
/**
* @Description: 双检锁单例模式
* @ClassName: SingletonDoubleCheckLock
* @Package com.jackeys.Singleton
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/18 12:53
* @Version: 1.0
*/
public class SingletonDoubleCheckLock {
private volatile static SingletonDoubleCheckLock singleton;
private SingletonDoubleCheckLock(){}
private static SingletonDoubleCheckLock getInstance(){
if (singleton == null){
synchronized (SingletonDoubleCheckLock.class){
if (singleton == null){
singleton = new SingletonDoubleCheckLock();
}
}
}
return singleton;
}
}