更新时间:2018-12-14 来源:黑马程序员技术社区 浏览量:
单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。<来自百度百科>
简单地说,单例模式表示的含义是某一个类, 在一个进程中只能有唯一的一个对象(实例), 并且在语法角度上进行制约.
单例模式要点某个类只能有一个实例
单例模式的类只提供私有的构造函数,禁止使用拷贝构造函数或者赋值运算符来创建新的对象
它必须自行创建这个实例
类定义中,含有一个该类的静态私有对象,既保证所有的实例只有一个成员变量,那么等同于这个类只有一个对象
他必须自行向整个系统提供这个实例
该类提供一个静态的公有的函数用于创建或获取它本身的静态私有对象
刚开始接触单例模式的时候,并不知道单例模式的用途是什么,但是其实使用单例模式的地方还是很多的,比如:
每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。
一个系统只能有一个窗口管理器或文件系统;
一个系统只能有一个计时工具或ID(序号)生成器;
如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。
所以: 当实例存在多个会引起程序逻辑错误的时候,请使用单例模式
单例模式的优点单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一的实体
因为类控制了实例化过程,所以类可以灵活更改实例化过程
虽然数量很少,但是如果每次对象请求引用的时候都要检查是否存在类的实例,仍需要一些开销;
懒汉模式以时间换空间;
饿汉模式以空间换时间;
饿汉模式就是一开始就将资源加再进来,可以说是一空间换时间的一种做法,每次使用的时候直接返回就好了
注意: 饿汉模式不存在线程安全的问题
懒汉模式懒汉模式就是等到实例化对象的时候才将资源加载进来,可以说是以时间换空间的做法
经典懒汉模式(线程不安全)由于要进行线程同步,所以在访问量比较大,或者可能访问的线程比较多时,采用饿汉实现,可以实现更好的性能。这是以空间换时间。
在访问量较小时,采用懒汉实现。这是以时间换空间。
面试的时候,就写饿汉模式吧,毕竟简单
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19