当前位置: 首页 > 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

相关文章:

  • Matplotlib plt.plot:从入门到精通,只需一篇文章!
  • 命令执行讲解和函数
  • 突破编程_C++_面试(基础知识(13))
  • Java 学习和实践笔记(11)
  • 【从Python基础到深度学习】4. Linux 常用命令
  • HarmonyOS鸿蒙学习基础篇 - Column/Row 组件
  • Vi 和 Vim 编辑器
  • 不等式的证明之一
  • 2023年哪个前端框架用的最多?
  • C++delete的使用/指针操作/内存/delete后该指针是否为空
  • vue-进阶语法(四)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第四天-ARM Linux编程之IIC与uart (物联技术666)
  • 蔚来面试解答
  • 【CV论文精读】【BEV感知】BEVFormer:通过时空Transformer学习多摄像机图像的鸟瞰图表示
  • 倒计时59天
  • 【node学习】协程
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Java 网络编程(2):UDP 的使用
  • React的组件模式
  • SegmentFault 2015 Top Rank
  • 程序员该如何有效的找工作?
  • 从PHP迁移至Golang - 基础篇
  • 警报:线上事故之CountDownLatch的威力
  • 小程序测试方案初探
  • 一个完整Java Web项目背后的密码
  • 责任链模式的两种实现
  • 怎么将电脑中的声音录制成WAV格式
  • Java总结 - String - 这篇请使劲喷我
  • 容器镜像
  • ​ssh免密码登录设置及问题总结
  • #14vue3生成表单并跳转到外部地址的方式
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (11)MATLAB PCA+SVM 人脸识别
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (三十五)大数据实战——Superset可视化平台搭建
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)appium-desktop定位元素原理
  • (正则)提取页面里的img标签
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ***通过什么方式***网吧
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .Net中的设计模式——Factory Method模式
  • .pub是什么文件_Rust 模块和文件 - 「译」