单例模式,是一种常用的 软件设计模式。许多时候整个系统只需要拥有一个全的局对象,这样有利于我们协调系统整体的行为,而单例模式的核心结构中只包含一个被称为单例的特殊类。
通过单例模式可以保证系统中,应用该模式的类只有一个实例,即一个类只有一个对象实例,同时,单例模式也可以分为 饿汉式 和 懒汉式。
应用场景 | 描述 |
---|---|
Windows 的 Task Manager(任务管理器) | Windows 的任务管理器就是很典型的单例模式。因为我们永远无法同时打开两个 windows 任务管理器。 |
Windows 的 Recycle Bin(回收站) | Windows 的回收站也是很典型的单例模式。在整个系统运行过程中,回收站一直维护着仅有的一个实例。 |
网站的计数器 | 网站的计数器一般也是采用单例模式实现,否则难以同步。 |
应用程序的日志应用 | 应用程序的日志一般都何用单例模式实现。因为共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。 |
数据库连接池 | 数据库连接池的设计一般也是采用单例模式。 |
多线程的线程池 | 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。 |
操作系统的文件系统 | 操作系统的文件系统也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。 |
因为数据库连接池是一种数据库资源,数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
饿汉式也叫立即加载的形式。饿汉式就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该实例化对象,先创建了再说。很着急的样子,故又被称为“饿汉模式”)。
常见的实现办法就是直接 new 实例化。
懒汉式也叫延迟加载的形式。懒汉式就是调用 get() 方法时实例才被创建(先不急着实例化出对象,等要用的时候才给你创建出来。不着急,故又称为“懒汉模式”)。
常见的实现方法就是在 get 方法中进行 new 实例化。
设计模式中的单例模式可以保证系统中,应用该模式的类一个类只有一个实例,即一个类只有一个对象实例。单例设计模式可以分为饿汉式和懒汉式两种模式。