主要单例模式实现如下:
- 饿汉式
- 懒汉式
- 线程安全的懒汉式
- 双重校验锁式
- 静态内部类式
一,饿汉式实现
(1)java恶汉式
public class Singleton{
public static final Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
(2)Kotlin饿汉式
//kotlin单例
object Singleton{
}
二,懒汉式实现
(1)java懒汉式
//Java实现
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
(2)kotlin懒汉式
//Kotlin实现
class Singleton private constructor() {
companion object {
private var instance: Singleton? = null
get() {
if (field == null) {
field = Singleton()
}
return field
}
fun get(): Singleton {
return instance!!
}
}
}
三,线程安全的懒汉式
(1)java线程安全的懒汉式
//Java实现
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){//使用同步锁
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
(2)kotlin线程安全的懒汉式
//Kotlin实现
class Singleton private constructor() {
companion object {
private var instance: Singleton? = null
get() {
if (field == null) {
field = Singleton()
}
return field
}
@Synchronized //引入 org.jetbrains.kotlin:kotlin-stdlib-jdk7
fun get(): Singleton{
return instance!!
}
}
}
四,双重校验锁式
(1)java双重校验锁式
//Java实现
public class Singleton {
private volatile static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
synchronized (Singleton.class){
if(instance==null){
instance=new Singleton();
}
}
}
return instance;
}
}
(2)kotlin双重校验锁式
//kotlin实现
class Singleton private constructor() {
companion object {
val instance: Singleton by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
Singleton()
}
}
}
五,静态内部类式
(1)java静态内部类式
//Java实现
public class Singleton {
private static class SingletonHolder {
private static Singleton instance = new Singleton();
}
private Singleton() {
System.out.println("Singleton has loaded");
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
(2)kotlin静态内部类式
//kotlin实现
class Singleton private constructor() {
companion object {
val instance = SingletonHolder.holder
}
private object SingletonHolder {
val holder = Singleton()
}
}