问答

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

作者:admin 2021-08-03 我要评论

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

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

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

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

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

###

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

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

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

###

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

###

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

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

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

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

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

  • 在对一个DIV进行缩放时,如果获取与计

    在对一个DIV进行缩放时,如果获取与计

  • mysql的一个问题

    mysql的一个问题

  • 成为一个优秀的前端还需要掌握哪些技术

    成为一个优秀的前端还需要掌握哪些技术

腾讯云代理商
海外云服务器