Kotlin单例代码实例

目录

一、饿汉式的实现

Kotlin版本

复制代码
object SingletonDemoKt

/**
 *  背后的逻辑代码:
    public final class SingletonDemoKt {
        public static final SingletonDemoKt INSTANCE;

        private SingletonDemoKt() {
        }

        static {
            SingletonDemoKt var0 = new SingletonDemoKt();
            INSTANCE = var0;
        }
    }
 */

Java版本

复制代码
public class SingletonDemo {
    private static SingletonDemo mInstance = new SingletonDemo();
    private SingletonDemo() {}
    public static SingletonDemo getInstance() {
        return mInstance;
    }
}

二、懒汉式的实现

Kotlin版本

复制代码
class SingletonDemo2Kt {
    companion object {
        private var mInstance : SingletonDemo2Kt? = null
            get() {
                if (field == null) {
                    field = SingletonDemo2Kt()
                }
                return field
            }
        fun getInstance() = mInstance!!
    }
    fun show() {
        println("SingletonDemo2Kt show")
    }
}

fun main() {
    SingletonDemo2Kt.getInstance().show()
}


/**
 * 背后逻辑代码:
    public final class SingletonDemo2Kt {
        private static SingletonDemo2Kt mInstance;
        public static final SingletonDemo2Kt.Companion Companion = new SingletonDemo2Kt.Companion((DefaultConstructorMarker)null);

        public final void show() {
            String var1 = "SingletonDemo2Kt show";
            boolean var2 = false;
            System.out.println(var1);
        }
        ...
        public static final class Companion {
            private final SingletonDemo2Kt getMInstance() {
                if (SingletonDemo2Kt.mInstance == null) {
                    SingletonDemo2Kt.mInstance = new SingletonDemo2Kt();
                }

            return SingletonDemo2Kt.mInstance;
        }

        private final void setMInstance(SingletonDemo2Kt var1) {
            SingletonDemo2Kt.mInstance = var1;
        }

        @NotNull
        public final SingletonDemo2Kt getInstance() {
            SingletonDemo2Kt var10000 = ((SingletonDemo2Kt.Companion)this).getMInstance();
            if (var10000 == null) {
                Intrinsics.throwNpe();
            }

            return var10000;
        }

        private Companion() {
        }

        // $FF: synthetic method
        public Companion(DefaultConstructorMarker $constructor_marker) {
            this();
        }
        }
    }
  */

Java版本

复制代码
public class SingletonDemo2 {
    private static SingletonDemo2 mInstance;
    private SingletonDemo2() {}

    public static SingletonDemo2 getInstance() {
        if (mInstance == null) {
            mInstance = new SingletonDemo2();
        }
        return mInstance;
    }

    public static void show() {
        System.out.println("SingletonDemo2 show");
    }

    public static void main(String[] args) {
        SingletonDemo2.getInstance().show();
    }
}

三、安全 懒汉式的实现

Kotlin实现

复制代码
class SingletonDemo3Kt {
    companion object {
        private var mInstance : SingletonDemo3Kt? = null
            get() {
                if (field == null) {
                    field = SingletonDemo3Kt()
                }
                return field
            }
        @Synchronized
        fun getInstance() = mInstance!!
    }
    fun show() {
        println("SingletonDemo3Kt show")
    }
}

fun main() {
    SingletonDemo3Kt.getInstance().show()
}


/**
 * 背后逻辑代码:
    public final class SingletonDemo2Kt {
        private static SingletonDemo2Kt mInstance;
        public static final SingletonDemo2Kt.Companion Companion = new SingletonDemo2Kt.Companion((DefaultConstructorMarker)null);

        public final void show() {
            String var1 = "SingletonDemo2Kt show";
            boolean var2 = false;
            System.out.println(var1);
        }
        ...
        public static final class Companion {
            private final SingletonDemo2Kt getMInstance() {
                if (SingletonDemo2Kt.mInstance == null) {
                    SingletonDemo2Kt.mInstance = new SingletonDemo2Kt();
                }

            return SingletonDemo2Kt.mInstance;
        }

        private final void setMInstance(SingletonDemo2Kt var1) {
            SingletonDemo2Kt.mInstance = var1;
        }

        @NotNull
        public final SingletonDemo2Kt getInstance() {
            SingletonDemo2Kt var10000 = ((SingletonDemo2Kt.Companion)this).getMInstance();
            if (var10000 == null) {
                Intrinsics.throwNpe();
            }

            return var10000;
        }

        private Companion() {
        }

        // $FF: synthetic method
        public Companion(DefaultConstructorMarker $constructor_marker) {
            this();
        }
        }
    }
  */

Java版本

复制代码
public class SingletonDemo3 {
    private static SingletonDemo3 mInstance;
    private SingletonDemo3() {}

    public static synchronized SingletonDemo3 getInstance() {
        if (mInstance == null) {
            mInstance = new SingletonDemo3();
        }
        return mInstance;
    }

    public static void show() {
        System.out.println("SingletonDemo3 show");
    }

    public static void main(String[] args) {
        SingletonDemo3.getInstance().show();
    }
}

四、双重校验DCL 的实现

Kotlin实现

复制代码
class SingletonDemo4Kt private constructor() {
    companion object {
        val mInstance : SingletonDemo4Kt by lazy (mode = LazyThreadSafetyMode.SYNCHRONIZED) { SingletonDemo4Kt() }
    }

    fun show() {
        println("SingletonDemo4Kt show")
    }
}
fun main() {
    SingletonDemo4Kt.mInstance.show()
}

Java实现

复制代码
public class SingletonDemo4 {
    private volatile static SingletonDemo4 mInstance;

    private SingletonDemo4() {}

    public static SingletonDemo4 getInstance() {
        if (mInstance == null) {
            synchronized (SingletonDemo4.class) {
                if (mInstance == null) {
                    mInstance = new SingletonDemo4();
                }
            }
        }
        return mInstance;
    }

    public void show() {
        System.out.println("show");
    }

    public static void main(String[] args) {
        SingletonDemo4.getInstance().show();
    }
}
相关推荐
墨天梦2 小时前
B19_SunnyWeather到阅读客户端
android·kotlin
墨天梦1 天前
B17_LifecycleLiveData与Flow
android·kotlin
熊猫钓鱼>_>2 天前
Kotlin Multiplatform for OpenHarmony 实战:为 Landscapist 实现图片加载适配
开发语言·kotlin·华为云·ai编程·harmonyos·鸿蒙·openharmony
ZealSinger2 天前
Kotlin2.4迁移context parameters
kotlin·协程·迁移·kotlin2.4
墨天梦2 天前
B16_Material主题与可访问交互
android·kotlin·交互
alexhilton2 天前
模块化Jetpack Compose架构
android·kotlin·android jetpack
mmsx2 天前
Android 测绘计算工程化:七四参数、高程拟合与单位系统
android·kotlin
事圆则缓3 天前
Kotlin Flow、StateFlow、SharedFlow 全解析:冷流、热流与 Android 状态管理
android·kotlin·php
应用市场3 天前
把旧 Pixel 变成相册备份中转站(上):Mac 到安卓的照片传输工具设计——流式上传、sha256 校验、adb forward 与 Bonjour
android·macos·adb·kotlin·swift
Kapaseker3 天前
Android 以后可能不会再有横竖屏适配了
android·kotlin