Kotlin设计模式-单例

来源:互联网 发布:大容量背包 知乎 编辑:程序博客网 时间:2024/06/07 17:44

前言

单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。
实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。
单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。

摘自百度百科-单例模式
简单来说:就是一个类在系统中仅允许存在一个实例化对象。

其实,单例模式很常用,但是为什么现在才说明,是因为我对Kotlin的Object理解不是很彻底,所以耽误到现在。T_T

Kotlin中的单例模式

Kotlin 中的单例模式,需要理解一个特殊的类型,这个类型叫做object,这个object可不是Java中所有类的父类(Object),这个object 就是创建单例用的,我们都知道,Java中单例有懒汉式、饿汉式,双重检查锁等几种单例变种。但是在Kotlin中只要object一种单例实现方式。

Kotlin object

为了简化匿名内部类的写法,而诞生的一个新关键字,使用代码如下。

btn.setOnClickListener(object : OnClickListener() {    override fun onclick(view:View) {        // ...        }})

但是因为Kotlin对于object的创建对象的方式是使用静态方式创建,所以可以变相的获得单例的特性。

show me code

object Printer {    init {        println("Initializing with object: $this")    }    fun print() = println("Printing with object: $this")}

调用代码

println("Start")Printer.print()
原创粉丝点击