php的单例模式及应用场景详解


Posted in PHP onFebruary 27, 2021

单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一。

这里又不具体讲如何实现单例模式和介绍其原理(因为这方便的已经有太多的好文章介绍了)

好多没怎么使用过的人可能会想,单例模式感觉不怎么用到,实际的应用场景有哪些呢?以下,我将列出一些就在咱们周边和很有意义的单例应用场景。

  1. Windows的Task Manager(任务管理器)就是很典型的单例模式(这个很熟悉吧),想想看,是不是呢,你能打开两个windows task manager吗? 不信你自己试试看哦~
  2. windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
  3. 网站的计数器,一般也是采用单例模式实现,否则难以同步。
  4. 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
  5. Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。
  6. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
  7. 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
  8. 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。
  9. HttpApplication 也是单位例的典型应用。熟悉http://ASP.Net(IIS)的整个请求生命周期的人应该知道HttpApplication也是单例模式,所有的HttpModule都共享一个HttpApplication实例.

总结以上,不难看出:

单例模式应用的场景一般发现在以下条件下:

(1)资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。

(2)控制资源的情况下,方便资源之间的互相通信。如线程池等。

到此这篇关于php的单例模式及应用场景详解的文章就介绍到这了,更多相关php单例模式及应用场景内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
php 采集书并合成txt格式的实现代码
Mar 01 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
eAccelerator的安装与使用详解
Jun 13 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
ThinkPHP CURD方法之order方法详解
Jun 18 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
实例介绍PHP的Reflection反射机制
Aug 05 PHP
php中rename函数用法分析
Nov 15 PHP
Zend Framework实现多文件上传功能实例
Mar 21 PHP
php_pdo 预处理语句详解
Nov 21 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 PHP
PHP+Mysql分布式事务与解决方案深入理解
Feb 27 #PHP
PHP并发场景的三种解决方案代码实例
Feb 27 #PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 27 #PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 #PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 #PHP
php命令行模式代码实例详解
Feb 26 #PHP
PHP时间类完整代码实例
Feb 26 #PHP
You might like
php 删除数组元素
2009/01/16 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
使用python实现个性化词云的方法
2017/06/16 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
财务经理的岗位职责
2013/12/17 职场文书
竞聘书模板
2014/03/31 职场文书
2014年大学生四年规划书范文
2014/04/03 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
自荐信格式模板
2015/03/27 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python