当前位置: 首页 > news >正文

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

摘要

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

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

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

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

AppRunTimeCacheData实例代码

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示例代码

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!!}//线程安全的懒汉式@Synchronizedfun 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

http://www.lryc.cn/news/298831.html

相关文章:

  • vue百度地图的和element输入框/v-region的联动
  • 搜索+哈希/平衡树,LeetCode 987. 二叉树的垂序遍历
  • 蓝桥杯每日一题之内存问题
  • Django前后端分离之后端实践2
  • windowsserver 2016 PostgreSQL9.6.3-2升级解决其安全漏洞问题
  • Java实现免税店商城管理系统 JAVA+Vue+SpringBoot+MySQL
  • 【Linux】信号
  • [NISACTF 2022]easyssrf
  • 在Linux系统中设置全局HTTP代理的步骤与技巧
  • 即席查询框架怎么选?
  • 【C语言】实现双向链表
  • Python操作MySQL基础
  • 【数学建模】【2024年】【第40届】【MCM/ICM】【E题 财产保险的可持续性】【解题思路】
  • SpringCloud--Eureka注册中心服务搭建注册以及服务发现
  • ansible shell模块 可以用来使用shell 命令 支持管道符 shell 模块和 command 模块的区别
  • qss的使用
  • archlinux 使用 electron-ssr 代理 socks5
  • macos安装local模式spark
  • 机器学习算法之支持向量机(SVM)
  • 线性判别分析(LDA)
  • Vue 前置导航
  • 串行通信,并行通信,波特率,全双工,半双工,单工等通信概念
  • 鸿蒙系统进一步学习(一):学习资料总结,少走弯路
  • 异步复位同步释放原则
  • M1 Mac使用SquareLine-Studio进行LVGL开发
  • web3知识体系汇总
  • 服务器与电脑的区别?
  • 结束 代码随想录 链表章节(下一张
  • re:从0开始的CSS学习之路 6. 字体相关属性
  • FPGA(基于xilinx)中PCIe介绍以及IP核XDMA的使用