Android 单例模式必知必会

一、概念

单例模式是运用最广泛的设计模式之一,在应用这个模式时,单例模式的类必须保证只有一个实例存在。多用于整个程序只需要有一个实例,通常很消耗资源的类,比如线程池,缓存,网络请求,IO操作,访问数据库等。由于类比较耗资源,所以没必要让它构造多个实例,这种就是单例模式比较好的使用场景。

1.1 单例类

单例模式(Singleton Pattern):一个类有且仅有一个实例,并且自行实例化向整个系统提供,也称为单例类。

单例模式有三个要点:

  • 1.某个类只能有一个实例。

  • 2.必须自行创建这个实例。

  • 3.必须给所有其他对象提供这一实例。

具体实现角度来说就是以下几点:

  • 1.单例模式的类只提供私有的构造函数

  • 2.通过一个静态方法或者枚举返回单例类对象

  • 3.确保单例类有且只有一个静态私有对象,尤其是在多线程环境下。

  • 4.提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

  • 5.确保单例类对象在反序列化时不会重新构建对象。

在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,让客户可以访问它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有;在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例。

1.2 优缺点

1.2.1 优点

  • 1.单例模式提供了对唯一实例的受控访问。因为单例类封装了它的唯一实例,所以它可以严格控制客户怎样以及何时访问它。

  • 2.由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。

  • 3.允许可变数目的实例。基于单例模式我们可以进行扩展,使用与单例控制相似的方法来获得指定个数的对象实例,既节省系统资源,又解决了单例单例对象共享过多有损性能的问题。

1.2.2 缺点

  • 1.由于单例模式中没有抽象层,因此单例类的扩展有很大的困难。

  • 2.单例类的职责过重,在一定程度上违背了“单一职责原则”。因为单例类既充当了工厂角色,提供了工厂方法,同时又充当了产品角色,包含一些业务方法,将产品的创建和产品的本身的功能融合到一起。

  • 3.现在很多面向对象语言(如Java、C#)的运行环境都提供了自动垃圾回收的技术,因此,如果实例化的共享对象长时间不被利用,系统会认为它是垃圾,会自动销毁并回收资源,下次利用时又将重新实例化,这将导致

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中,可以使用单例模式来保存数据。单例模式是一种设计模式,用于确保一个类只有一个实例存在。在Android中,可以使用单例模式来保存全局数据,比如登录信息、用户配置等。 要实现单例模式保存数据,可以按照以下步骤进行操作: 1. 创建一个单例类,该类负责保存数据并提供访问数据的方法。这个类应该是线程安全的,以确保在多线程环境下数据的一致性。 2. 在单例类中添加一个私有的静态实例变量,并使用私有的构造函数来防止外部直接实例化该类。 3. 在单例类中添加一个公共的静态方法,用于获取单例实例。在这个方法中,可以通过判断实例是否为空来实现延迟加载,即只在第一次获取实例时才进行实例化。 4. 在应用中需要保存数据的地方,可以通过调用单例类的静态方法来获取实例,并使用该实例来保存数据。 通过以上步骤,就可以使用单例模式来保存Android应用中的数据。这样可以确保数据的一致性,并且在整个应用中都可以方便地访问到这些数据。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android 单例模式](https://blog.csdn.net/m0_56255097/article/details/123738241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Android 单例模式保存数据](https://blog.csdn.net/qq_41985689/article/details/102869992)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值