关于单例模式,还是不清楚何时该用单例

发布于 2022-09-12 02:55:46 字数 398 浏览 31 评论 0

对于设计模式中的单例模式,到底何时该用单例?
今天在Android LocalBroadcastManager本地广播见到了单例模式

public static LocalBroadcastManager getInstance(Context context) {
    synchronized (mLock) {
        if (mInstance == null) {
            mInstance = new LocalBroadcastManager(context.getApplicationContext());
        }
        return mInstance;
    }
}

有没有大神能够指点下,为何这里要用单例?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

凶凌 2022-09-19 02:55:46

个人拙见,你想用单例模式一般是以下情况

  1. 你用单例模式创建的类,你希望它的生命周期是从你创建它开始,一直保持到应用进程被杀死
  2. 你用单例模式创建的类,你希望它只有一个,不要重复创建多个
  3. 创建的代价比较大(这个是来自 微凉 的回答)

就以 LocalBroadcastManager 为例,它的工作模式是你在这个类里面注册广播接收器,再通过它来发送广播,从而注册的广播接收器可以收到这个广播。
那么如果不使用单例模式,你给对象a注册一个接收器,那么下次你new出来一个对象b,你觉得朝着对象b发广播,a还能收到吗?这就需要你获取到的永远是对象a吧?
同样,如果对象a不是静态的(或者说单例),过一会它失去引用被回收了,那么下次你怎么获取到它?
再举个例子,Application不就是典型的单例吗?

野却迷人 2022-09-19 02:55:46

创建需要较大代价,创建后比较稳定,就可以使用单例模式,可以起到缓存的作用。和枚举有类似的地方

手长情犹 2022-09-19 02:55:46

Android广播分为全局广播和本地广播,全局广播的管理和广播的分发都是由系统来处理的,但是本地广播是由应用程序自己管理的,因此,在应用程序的当前进程里,需要有一个不依赖于各个组件生命周期的广播管理器,用于接受注册和广播分发。

需要注意的是,如果使用了远程服务(Remote Service),那这东西就不灵了,因为远程服务相对于应用主程序,它是一个独立的进程。

依此类推,就大概可以知道什么时候该使用单例了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文