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脚本的10个技巧(6)
Oct 09 PHP
让PHP支持断点续传的源码
May 16 PHP
php通过COM类调用组件的实现代码
Jan 11 PHP
PHP 线程安全与非线程安全版本的区别深入解析
Aug 06 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
php使用PDO方法详解
Dec 27 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
PHP实现的多维数组去重操作示例
Jul 21 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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/08/06 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
比较详细PHP生成静态页面教程
2012/01/10 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
两个php日期控制类实例
2014/12/09 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
Smarty模板语法详解
2019/07/20 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
JavaScript多线程详解
2015/08/12 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
Python原始字符串(raw strings)用法实例
2014/10/13 Python
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
python字典get()方法用法分析
2015/04/17 Python
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
Python读写zip压缩文件的方法
2018/08/29 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
python生成特定分布数的实例
2019/12/05 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
傲盾软件面试题
2015/08/17 面试题
装潢设计实习自我鉴定
2013/09/19 职场文书
《赶海》教学反思
2014/04/20 职场文书
事业单位考核材料
2014/05/21 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书