美文网首页
java单例的另一种写法

java单例的另一种写法

作者: allen_li | 来源:发表于2018-10-10 16:21 被阅读0次

java单例的另一种写法

阅读android源码时发现ActivityManager有一个单例的写法如下:

/**
     * @hide
     */
    public static IActivityManager getService() {
        return IActivityManagerSingleton.get();
    }

    private static final Singleton<IActivityManager> IActivityManagerSingleton =
            new Singleton<IActivityManager>() {
                @Override
                protected IActivityManager create() {
                    final IBinder b = ServiceManager.getService(Context.ACTIVITY_SERVICE);
                    final IActivityManager am = IActivityManager.Stub.asInterface(b);
                    return am;
                }
            };

Singleton这个类是源码android.util包里面打上@hide
代码路径:/frameworks/base/core/java/android/util/Singleton.java

package android.util;
/**
 * Singleton helper class for lazily initialization.
 *
 * Modeled after frameworks/base/include/utils/Singleton.h
 *
 * @hide
 */
public abstract class Singleton<T> {
    private T mInstance;

    protected abstract T create();

    public final T get() {
        synchronized (this) {
            if (mInstance == null) {
                mInstance = create();
            }
            return mInstance;
        }
    }
}

下面我用kotlin来实现如上效果

abstract class SingletonV2<T> {

    private val mInstance: T by lazy(LazyThreadSafetyMode.SYNCHRONIZED)
    {
        create()
    }

    protected abstract fun create(): T

    fun get(): T {
        return mInstance
    }
}

如何使用?

private static final SingletonV2<PKModel> singletonV2 = new SingletonV2<PKModel>() {

        @Override
        protected PKModel create() {
            return new PKModel();
        }
    };

    public static PKModel getInstance() {
        return singletonV2.get();
    }

这种单例写法的好处就是使用了线程安全,并且是双延迟

相关文章

  • java单例的另一种写法

    java单例的另一种写法 阅读android源码时发现ActivityManager有一个单例的写法如下: Sin...

  • Java中单例模式你用的哪一种?

    一起讨论java中的单例模式。单例模式是java设计模式中算是最简单的设计模式了。 * java实现单例模式的写法...

  • Java基础系列-单例的7种写法

    原创文章,转载请标注出处:《Java基础系列-单例的7种写法》 一、概述 Java中单例有7种写法,这个是在面试中...

  • Kotlin中的单例模式与Java对比

    目前java中的单例模式有多种写法,kotlin中的写法更多一点,本篇会总结全部的到单例模式写法。 一、懒人写法(...

  • 单例

    典型单例的写法 另一种优美的写法,利用静态变量 更加优美的写法(android慎用)

  • Java四种单例设计模式

    Java中的四种单例模式 单例模式是最容易理解的设计模式之一,介绍Java中单例模式的四种写法。 1.基本单例模式...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • 单例模式

    转载单例模式的七种写法代码地址GitHub java单例的七种写法## 第一种(懒汉,线程不安全): 这种写法la...

  • kotlin实现单例

    java实现单例模式 一直习惯于java的写法,java实现单例主要的思想是构造函数私有,然后考虑线程安全,在实现...

  • Java设计模式—单例模式

    概念 java中单例模式是一种常见的设计模式,单例模式的写法有好几种,比较常见的有:懒汉式单例、饿汉式单例。单例模...

网友评论

      本文标题:java单例的另一种写法

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