设计模式-单例模式(Kotlin)

定义:单例模式是最简单也是最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问。不需要实例化该类的对象。

饿汉式:类的加载就会导致该单实例对象被创建

懒汉式:类的加载不会导致该单例对象被创建,而是首次使用该对象时才会被创建

//饿汉式
class Signleton{
    companion object{
        private val instance = Signleton() //类创建了实例就会被创建
        fun getInstance() = instance //这里只是代表使用  但是对象早已创建
    }
}

//饿汉式  枚举方式
enum class Singleton{
    INSTANCE
}
//类的加载和对象的创建并不同时,但是创建对象的时候是一个动态的过程,如果同时有多个线程访问这个实例,这个时候实例还不存在,就会重复创建多个实例

//懒汉式  线程不安全
class Signleton{
    companion object{
        private var instance: Signleton? = null
        fun getInstance(): Signleton{
            if (instance == null)
                instance = Signleton()
            return instance!!
        }
    }
}


//懒汉式  线程安全  Kotlin中的懒汉式线程安全非常的简单  使用by lazy就好了
class Signleton{
    companion object{
        private val instance : Signleton by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { Signleton() }
        @JvmName("getInstance1")
        fun getInstance(): Signleton = instance
    }
}

//懒汉式  静态内部类
//推荐使用  在没有加锁的情况下,保证了多线程下的安全,并且没有任何性能影响和空间浪费  
class Signleton{
    companion object{
        fun getInstance() = InstanceHolder.INSTANCE
    }

    object InstanceHolder{
        val INSTANCE = Signleton()
    }
}

//Kotlin写法   线程安全,且懒汉式
object Singleton{
    
}

饿汉式好处:不需要线程锁之类的,性能得到的最大化

饿汉式坏处:不能在需要使用的时候创建,相比于懒汉式浪费内存

懒汉式好处:在需要使用的时候再创建对象

懒汉式坏处:因为需要加锁,所以懒汉式的性能会有损耗

tip:推荐使用静态内部类的方式,即实现了懒汉式,又没有性能损耗,是一种非常优秀的选择

你可能感兴趣的:(Kotlin-设计模式,单例模式,kotlin,设计模式,1024程序员节)