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 adodb连接不同数据库
Mar 19 PHP
c#中的实现php中的preg_replace
Dec 21 PHP
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
php多功能图片处理类分享(php图片缩放类)
Mar 14 PHP
8个PHP数组面试题
Jun 23 PHP
简单介绍PHP的责任链编程模式
Aug 11 PHP
PHP实现冒泡排序的简单实例
May 26 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
May 05 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
Aug 30 PHP
有关PHP 中 config.m4 的探索
Aug 26 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
德生H-501的评价与改造
2021/03/02 无线电
PHP中创建并处理图象
2006/10/09 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
2020/08/27 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
200 行python 代码实现 2048 游戏
2018/01/12 Python
详解Python发送email的三种方式
2018/10/18 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
如何通过python实现全排列
2020/02/11 Python
Java面试题:为什么要用Java
2012/05/11 面试题
销售人员个人求职信
2013/09/26 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
公司庆典欢迎词
2015/01/26 职场文书
工会积极分子个人总结
2015/03/03 职场文书
财务会计求职信范文
2015/03/20 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
python中Tkinter 窗口之输入框和文本框的实现
2021/04/12 Python
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js
mysql查看表结构的三种方法总结
2022/07/07 MySQL