单例模式都用在:1、Windows的Task Manager;2、windows的Recycle Bin;3、网站的计数器;4、应用程序的日志应用;5、Web应用的配置对象的读取;6、数据库连接池的设计等。Windows的Task Manager(任务管理器)就是很典型的单例模式。
一、单例模式的常见应用场景
1、Windows的Task Manager(任务管理器)就是很典型的单例模式。
2、windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
3、网站的计数器,一般也是采用单例模式实现,否则难以同步。
4、应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
5、Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。
6、数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
7、多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
8、操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。
9、HttpApplication 也是单位例的典型应用。
二、什么是单例模式
单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一。
单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的少数实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的少数实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个少数实例毫无意义。
延伸阅读
实现方式
通常单例模式在Java语言中,有两种构建方式:
- 懒汉式—线程不安全:最基础的实现方式,线程上下文单例,不需要共享给所有线程,也不需要加synchronize之类的锁,以提高性能。
- 懒汉式—线程安全:加上synchronize之类保证线程安全的基础上的懒汉模式,相对性能很低,大部分时间并不需要同步
- 饿汉方式。指全局的单例实例在类装载时构建。
- 双检锁式。在懒汉式基础上利用synchronize关键字和volatile关键字确保名列前茅次创建时没有线程间竞争而产生多个实例,仅名列前茅次创建时同步,性能相对较高
- 登记式。作为创建类的全局属性存在,创建类被装载时创建
- 枚举。java中枚举类本身也是一种单例模式
优缺点
优点
一、实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问少数实例。
二、灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。
缺点
一、开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
二、可能的开发混淆
使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
三、对象生存期
不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。
文章标题:单例模式都用在什么地方,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/48838