单例设计模式

单例设计模式教程

单例模式,是一种常用的 软件设计模式。许多时候整个系统只需要拥有一个全的局对象,这样有利于我们协调系统整体的行为,而单例模式的核心结构中只包含一个被称为单例的特殊类。

通过单例模式可以保证系统中,应用该模式的类只有一个实例,即一个类只有一个对象实例,同时,单例模式也可以分为 饿汉式懒汉式

单例设计模式使用场景

应用场景 描述
Windows 的 Task Manager(任务管理器) Windows 的任务管理器就是很典型的单例模式。因为我们永远无法同时打开两个 windows 任务管理器。
Windows 的 Recycle Bin(回收站) Windows 的回收站也是很典型的单例模式。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
网站的计数器 网站的计数器一般也是采用单例模式实现,否则难以同步。
应用程序的日志应用 应用程序的日志一般都何用单例模式实现。因为共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
数据库连接池 数据库连接池的设计一般也是采用单例模式。
多线程的线程池 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
操作系统的文件系统 操作系统的文件系统也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。

说明

因为数据库连接池是一种数据库资源,数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。

单例模式优缺点

优点

  • 在内存中只有一个对象,节省内存空间。
  • 避免频繁的创建销毁对象,可以提高性能。
  • 避免对共享资源的多重占用,简化访问。
  • 为整个系统提供一个全局访问点。

缺点

  • 不适用于变化频繁的对象。
  • 滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出。
  • 如果实例化的对象长时间不被利用,系统会认为该对象是垃圾而被回收,这可能会导致对象状态的丢失。

单例设计模式分类

饿汉式

饿汉式也叫立即加载的形式。饿汉式就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该实例化对象,先创建了再说。很着急的样子,故又被称为“饿汉模式”)。

常见的实现办法就是直接 new 实例化。

懒汉式

懒汉式也叫延迟加载的形式。懒汉式就是调用 get() 方法时实例才被创建(先不急着实例化出对象,等要用的时候才给你创建出来。不着急,故又称为“懒汉模式”)。

常见的实现方法就是在 get 方法中进行 new 实例化。

单例设计模式总结

设计模式中的单例模式可以保证系统中,应用该模式的类一个类只有一个实例,即一个类只有一个对象实例。单例设计模式可以分为饿汉式和懒汉式两种模式。