【Kotlin设计模式】Kotlin中单例模式

前言

单例模式(Singleton Pattern),是确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。在 Android 中,有许多系统服务和 API 使用了单例模式,比如:

Context: 通过getApplicationContext() 获取到的进程中全局唯一Context上下文对象。

SharedPreferences: 通过 getSharedPreferences()获取 ,使用单例模式来管理应用程序中的持久化数据。在进程中是全局唯一的。

还有一些常用的系统服务管理类,比如WindowManager、WifiManager、ConnectivityManager等等

实现

在Kotlin中实现单例的方式比较简单,它提供了关键字object声明单例模式,编译器会自动确保实例的唯一性和线程安全性。

kotlin 复制代码
object Singleton {

    private const val name = "Ho"

    fun showName() {
        println("My name is: $name")
    }
}


Singleton.showName()

正常开发中,有些功能需要在单例类中初始化,在init代码块中进行操作即可。

kotlin 复制代码
object Singleton {

    private const val name = "Ho"

    //做初始化操作
    init {
        println("Singleton class invoked.")
    }

    fun showName() {
        println("My name is: $name")
    }
}

在某些情况下,我们希望实现延时加载单例,只有在第一次使用的时候再进行创建,Kotlin中提供了by lazy来实现懒加载。

kotlin 复制代码
class LazySingleton private constructor(){

    private  val name = "Ho"
    
    companion object{
        val instance: LazySingleton by lazy { LazySingleton() }
    }

    //做初始化操作
    init {
        println("LazySingleton class invoked.")
    }

    fun showName() {
        println("My name is: $name")
    }
}

总结

Kotlin 的单例模式通过 object 关键字实现,简洁且线程安全。对于需要懒加载的情况,可以使用 by lazy 实现。

相关推荐
geovindu15 小时前
rust: Semaphore Pattern
开发语言·后端·设计模式·rust·代理模式·企业级信号量模式·同步型模式
是2的10次方啊15 小时前
设计模式与生活⑧:快递到了,别一直刷物流
设计模式
我是唐青枫17 小时前
Kotlin Inheritance(继承)详解:语法、原理、实战 Demo
开发语言·kotlin
Goway_Hui2 天前
【KMP for OpenHarmony】-- 在鸿蒙工程中使用 Apollo-Kotlin
华为·kotlin·harmonyos
释厄6232 天前
AI 军备竞赛悖论——为 AI 卖游戏但 AI 需要游戏母场景
人工智能·游戏·kotlin
raindayinrain2 天前
c++设计模式
开发语言·c++·设计模式
工一木子2 天前
设计模式与生活⑦:你打的车,隔着一个平台
设计模式
D e re k ZH2 天前
保序回归:从 PAVA 到可并堆的单调约束优化
c++·算法·数据挖掘·回归·kotlin
电子科技圈2 天前
2026 RISC-V中国峰会观察:编译调试工具链的“在场节奏”,释放了什么信号?
大数据·人工智能·设计模式·软件工程·软件构建·代码规范·risc-v
Goway_Hui2 天前
【KMP for OpenHarmony】Cache4k 0.14.0 鸿蒙适配
华为·kotlin·harmonyos