重学23种设计模式——单例模式(一)

264 阅读2分钟
前言:

这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战

说明:文章部分内容出自网络,如有侵权请与我本人联系(评论区留言)

单例模式会分两小节来说,本小节我会从以下几点来阐述单例模式。作为开发者,对于单例模式肯定是非常熟悉的,因为它是应用最广的一个模式,那么跟我一起来重学吧。如有不好的地方,还请评论区留言,感谢!!!

image.png

1、介绍

单例模式是Java中最简单的设计模式之一,有可能是很多初级工程师唯一会使用的设计模式,在面试当中也会问到单例模式。在使用这个模式的时候,单例对象的类必须保证只有一个实例存在,它提供了一种创建对象的最佳方式,这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。总之可以用一句话来解释什么是单例模式:保证整个系统中一个类只有一个对象的实例

2、定义

确保单例类只有一个实例,并且这个单例类提供一个函数接口让其他类获取到这个唯一的实例。

3、主要解决

一个全局使用的类频繁地创建与销毁。

4、使用场景

  • 当你想控制实例数目,节省系统资源的时候
  • 创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等
  • 如果创建太多这个类实例会导致内存占用太多,如二次封装okhttp网络框架时

5、优缺点

优点:

  • 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例
  • 避免对资源的多重占用,比如我们熟悉的写文件操作
  • 由于单例只有一个实例,对于创建比较耗资源的对象可以减少系统的性能开销。
  • 可以在系统设置全局的访问点,优化和共享资源访问。 缺点:
  • 最好不要用到连接池那块,N多对象共享一个连接池,容易导致连接池溢出的
  • 没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化
  • 扩展性差,想扩展每次都得改代码
  • 使用场景比较单调,如果是在多场景不断变化的实例对象最好不要使用单例,数据容易出问题