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制作静态网站的模板框架(二)
Oct 09 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 PHP
PHP数据库处理封装类实例
Dec 24 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
PHP实现两种排课方式
Jun 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
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
一段实时更新的时间代码
2006/07/07 Javascript
Javascript Object.extend
2010/05/18 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
js实现圆盘记速表
2015/08/03 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
python 获取字典键值对的实现
2020/11/12 Python
营销人才自我鉴定范文
2013/12/25 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
护理专科学生自荐书
2014/07/05 职场文书
事业单位聘任报告
2015/03/02 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
单位介绍信格式范文
2015/05/04 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
只用Python就可以制作的简单词云
2021/06/07 Python
python基于turtle绘制几何图形
2021/06/15 Python