Kotlin:单例模式(项目使用实例)

摘要

单例模式主要的五种如下:

  • 饿汉式
  • 懒汉式
  • 线程安全的懒汉式
  • 双重校验锁式(Double Check)
  • 静态内部类式

一、项目使用单例模式实例场景

app在运行时缓存部分数据,作为全局缓存数据,以便其他页面及时更新页面对应状态的数据,例如,个人信息、是否显示检测更新弹框等业务逻辑。这时定义一个对象并使用单例模式创建实例。

AppRunTimeCacheData实例代码

bash 复制代码
class AppRunTimeCacheData {
	//单例模式(双重校验锁式)
    companion object {
        val INSTANCE by lazy { AppRunTimeCacheData() }
    }

	var showDownLoadAppDialog: Boolean = true //是否显示下载app弹框
	var mLoginBean: LoginBean? = null // 用户个人信息

	/**
	 * 更新用户个人信息数据
	 */
	 fun setUserData(loginBean: LoginBean) {
        mLoginBean = loginBean
     }

	/**
	 * 退出登录,清空运行时缓存的数据
	 */
	 fun loginOut() {
        mLoginBean = null
     }
	
}

使用AppRunTimeCacheData示例

  1. 在所有触发退出登录的地方统一使用示例如下
    AppRunTimeCacheData.INSTANCE.loginOut()
  2. 在登录成功后或者获取到个人信息数据时更新缓存数据示例如下
    AppRunTimeCacheData.INSTANCE.setUserData(loginBean)

SingletonKT示例代码

bash 复制代码
class SingletonKT{

    //饿汉式
    /*
         object SingletonKT
        直接将 SingletonKT 定义为 object
     */

    companion object {
        //         val INSTANCE = SingletonKT()
        private var INSTANCE: SingletonKT? = null
            //懒汉式
            get() {
                if (field == null) {
                    field = SingletonKT()
                }
                return field
            }


        //懒汉式
        fun get(): SingletonKT {
            return INSTANCE!!
        }

        //线程安全的懒汉式
        @Synchronized
        fun get2(): SingletonKT {
            return INSTANCE!!
        }

        //双重校验锁式(Double Check)
        val INSTANCE2: SingletonKT by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            SingletonKT()
        }

        //静态内部类式
        val INSTANCE3 = SingletonKTHolder.holder

    }

    private object SingletonKTHolder{
        val holder = SingletonKT()
    }
}

使用SingletonKT示例

SingletonKT.INSTANCE

SingletonKT.get()

SingletonKT.get2()

SingletonKT.INSTANCE3

相关推荐
jiay218 小时前
Kotlin-面向对象之构造函数、实例化和初始化
android·开发语言·kotlin
L_cl18 小时前
Python学习从0到1 day27 Python 高阶技巧 ③ 设计模式 — 单例模式
学习·单例模式·设计模式
我怀里的猫21 小时前
glide ModelLoader的Key错误使用 可能造成的内存泄漏
android·kotlin·glide
陟彼高冈yu1 天前
第10天:Fragments(碎片)使用-补充材料——‘MainActivity.kt‘解读
android·kotlin·android studio
姑苏风1 天前
《Kotlin实战》-第11章:DSL构建
android·开发语言·kotlin
大耳猫2 天前
Android 解决Java和Kotlin JDK编译版本不一致异常
android·java·kotlin
ktkiko112 天前
Java中的设计模式——单例模式、代理模式、适配器模式
java·单例模式·设计模式
傻傻虎虎3 天前
【真题笔记】21年系统架构设计师案例理论点总结
单例模式·系统架构·uml·命令模式
萌面小侠Plus3 天前
Android笔记(三十五):用责任链模式封装一个App首页Dialog管理工具
android·dialog·笔记·kotlin·责任链模式
Mr. zhihao3 天前
享元模式及其运用场景:结合工厂模式和单例模式优化内存使用
单例模式·享元模式