当前位置:  开发笔记 > 编程语言 > 正文

如何实现可配置的单例?

如何解决《如何实现可配置的单例?》经验,为你挑选了0个好方法。

此问题与Android有关,但在其他情况下也可以询问.我需要创建一个暴露单身人士的图书馆; 或者我想确保只存在我的类的一个实例,并且可以在代码中的任何位置抓取而不传递引用.

但是单身人士需要一些参数.例如,在Android中,Context通常需要一个对象.我还必须确切地说,因为我提供了一个库,所以我希望用户能够轻松操作并且我无法控制Application Android 中的(此类有时可用于管理整个应用程序的对象实例).

一种已知的解决方案是执行以下操作:

static MySingleton sInstance;
MySingleton.getInstance(Context c) {
    if (sInstance == null) {
        sInstance = new MySingleton(c.getApplicationContext());
    }
    return sInstance;
}

但它很奇怪,因为参数getInstance实际上只在第一次创建单身时使用.

我可以为单例提供一个setter并要求开发人员正确设置所需的参数,但可能会出现一些奇怪的情况:

// Good usage
MySingleton.getInstance().setContext(context.getApplicationContext());
MySingleton.getInstance().doSomethingThatRequiresContext(); // OK

// Bad usage
MySingleton.getInstance().doSomethingThatRequiresContext(); // Error!
MySingleton.getInstance().setContext(context.getApplicationContext());

我可以检查每个方法的开头是否正确配置了单例,并在状态不好的情况下启动一些异常,但API使用起来不那么简单:

MySingleton.getInstance().setContext(context.getApplicationContext());

try {
    MySingleton.getInstance().doSomethingThatRequiresContext();
}
catch(BadSingletonConfiguration e) { }

即使我使用运行时异常,使用也是危险的.

除非我恳请用户手动创建实例并确保自己只存在一个实例,否则我看不到一个好的解决方案.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有