单例模式都用在什么地方

单例模式都用在: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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
E.Z的头像E.Z

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部