常见的五种单例模式
- 饿汉式
- 懒汉式
- 线程安全的懒汉式
- 双重校验锁式
- 静态内部类式
一、饿汉实现方式
Kotlin 代码解读复制代码//Java实现
public class SingletonDemo {
private static SingletonDemo instance=new SingletonDemo();
private SingletonDemo(){
}
public static SingletonDemo getInstance(){
return instance;
}
}
//Kotlin实现
object SingletonDemo
二、懒汉实现方式
Kotlin 代码解读复制代码//Java实现
public class SingletonDemo {
private static SingletonDemo instance;
private SingletonDemo(){}
public static SingletonDemo getInstance(){
if(instance == null){
instance = new SingletonDemo();
}
return instance;
}
}
//Kotlin实现
class SingletonDemo private constructor() {
companion object {
private var instance: SingletonDemo? = null
get() {
if (field == null) {
field = SingletonDemo()
}
return field
}
fun get(): SingletonDemo{
//这里不用getInstance作为为方法名,是因为在伴生对象声明时,内部已有getInstance方法,所以只能用其他名字
return instance!!
}
}
}
三、线程安全的懒汉实现方式
Kotlin 代码解读复制代码//Java实现
public class SingletonDemo {
private static SingletonDemo instance;
private SingletonDemo(){}
//使用同步锁
public static synchronized SingletonDemo getInstance(){
if(instance == null){
instance = new SingletonDemo();
}
return instance;
}
}
//Kotlin实现
class SingletonDemo private constructor() {
companion object {
private var instance: SingletonDemo? = null
get() {
if (field == null) {
field = SingletonDemo()
}
return field
}
//方法声明为同步,需要添加@Synchronized注解
@Synchronized
fun get(): SingletonDemo{
return instance!!
}
}
}
四、双重校验锁实现方式(Double Check)
Kotlin 代码解读复制代码//Java实现
public class SingletonDemo {
private volatile static SingletonDemo instance;
private SingletonDemo(){}
public static SingletonDemo getInstance(){
if(instance == null){
synchronized (SingletonDemo.class){
if(instance == null){
instance = new SingletonDemo();
}
}
}
return instance;
}
}
//Kotlin实现
class SingletonDemo private constructor() {
companion object {
val instance: SingletonDemo by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
SingletonDemo() }
}
}
五、静态内部类实现方式
Kotlin 代码解读复制代码//Java实现
public class SingletonDemo {
private static class SingletonHolder{
private static SingletonDemo instance = new SingletonDemo();
}
private SingletonDemo(){
System.out.println("Singleton has loaded");
}
public static SingletonDemo getInstance(){
return SingletonHolder.instance;
}
}
//Kotlin实现
class SingletonDemo private constructor() {
companion object {
val instance = SingletonHolder.holder
}
private object SingletonHolder {
val holder = SingletonDemo()
}
}
评论记录:
回复评论: