美文网首页
kotlin 单利模式

kotlin 单利模式

作者: 冷极夜 | 来源:发表于2019-08-09 17:58 被阅读0次

1. 懒汉式

java
线程不安全 缺点是在多线程不能正常工作

public class Singleton {

    private static Singleton singleton;

    public static Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }

    private Singleton() {
    }
}

线程安全 效率比较低

public class Singleton {

    private static Singleton singleton;

    public static synchronized Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }

    private Singleton() {

    }
}

kotlin
线程不安全

class SingletonKotlin private constructor() {

    companion object {
        private var singleton: SingletonKotlin? = null
            get() {
                // field 幕后属性或幕后字段  
                // 作用域仅仅存在于当前属性的setter/getter方法中,它就像当前属性的影子一样
                if (field == null) {
                    field = SingletonKotlin()
                }
                return field
            }

        fun get(): SingletonKotlin {
            return singleton!!
        }
    }
}

线程安全

class SingletonKotlin private constructor() {

    companion object {
        private var singleton: SingletonKotlin? = null
            get() {
                // field 幕后属性或幕后字段
                // 作用域仅仅存在于当前属性的setter/getter方法中,它就像当前属性的影子一样
                if (field == null) {
                    field = SingletonKotlin()
                }
                return field
            }
        
        @Synchronized
        fun get(): SingletonKotlin {
            return singleton!!
        }
    }
}

2. 饿汉式 先创建实例,直接使用,避免了多线程的同步问题

java

public class Singleton {

    private static Singleton singleton = new Singleton();

    public static synchronized Singleton getInstance() {
        return singleton;
    }

    private Singleton() {

    }
}
public class Singleton {

    private static Singleton singleton;

    static {
        singleton = new Singleton();
    }


    public static synchronized Singleton getInstance() {
        return singleton;
    }

    private Singleton() {

    }
}

两种写法都差不多,都是先创建实例 然后直接使用
kotlin

object SingletonKotlin

3. 双重校验模式

写法比较麻烦
java

public class Singleton {

    private static Singleton singleton;

    private Singleton() {
    }

    public static synchronized Singleton getInstance() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

kotlin

class SingletonKotlin private constructor() {
    // by lazy延迟加载
    val instance: SingletonKotlin by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
        SingletonKotlin()
    }
}

4. 静态内部类

延迟加载,减少内存开销
java

public class Singleton {
    private Singleton() {
    }

    private static class Instance {
        private static final Singleton singleton = new Singleton();
    }

    public static synchronized Singleton getInstance() {
        return Instance.singleton;
    }
}

kotlin

class SingletonKotlin private constructor() {
    companion object {
        var singleton = SingletonKotlin.instance
    }

    private object SingletonKotlin {
        val instance = SingletonKotlin()
    }
}

5. 枚举类单利模式

不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。但是没有延迟加载

public enum Singleton {
    SINGLETON;

    public void test() {
        // 要做的事情
    }
}

相关文章

  • kotlin 单利模式

    1. 懒汉式 java线程不安全 缺点是在多线程不能正常工作 线程安全 效率比较低 kotlin线程不安全 线程...

  • Kotlin & Java 之单利模式

    第一种: 只适合单线程环境,懒汉模式 第二种: 第三种: 第四种: 关于第四种就是采用 volatile 关键字的...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 单例模式

    单利模式

  • 单利设计模式

    单利模式的介绍 单利模式是应用最广的模式之一,也可能是很多初级工程师唯一会使用的设计模式。在应用这个模式时,单利对...

  • 细品 javascript 设计模式(单利模式)

    我尽量用最少的文字,最少的篇幅,讲明白设计模式的方方面面。文章连接 理解单利模式 上代码:通用的惰性单利模式 单利...

  • 设计模式

    单利模式 代理模式 工厂模式 装饰者模式:

  • 2018-05-14

    单利设计模式 懒汉式 单例模式 饿汉式 单利模式 懒汉式与饿汉式的区别: 双重锁式 单例模式 (DCL )

  • 单利模式

    11

  • 单利模式

    简介 定义:保证一个类仅有一个实例,并提供唯一一个全局访问他的节点。 1,饿汉模式 public Class Si...

网友评论

      本文标题:kotlin 单利模式

      本文链接:https://www.haomeiwen.com/subject/gytkjctx.html