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中的路径问题与set_include_path使用介绍
Feb 11 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
destoon实现调用图文新闻的方法
Aug 21 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
PHP大文件切割上传功能实例分析
Jul 01 PHP
Laravel 实现数据软删除功能
Aug 21 PHP
Laravel框架创建路由的方法详解
Sep 04 PHP
PHP实现简单注册登录系统
Dec 28 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实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
php将html转为图片的实现方法
2017/05/19 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
JS 判断代码全收集
2009/04/28 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
python保留小数位的三种实现方法
2020/01/07 Python
新手学python应该下哪个版本
2020/06/11 Python
Python远程linux执行命令实现
2020/11/11 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
丧事答谢词
2015/01/05 职场文书
学校国庆节活动总结
2015/03/23 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
Python实现列表拼接和去重的三种方式
2021/07/02 Python