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 相关文章推荐
输出控制类
Oct 09 PHP
ADODB类使用
Nov 25 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
php创建sprite
Feb 11 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
php版微信公众号接口实现发红包的方法
Oct 14 PHP
Yii2单元测试用法示例
Nov 12 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常用函数和常见疑难问题解答
2014/03/05 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
小程序实现长按保存图片的方法
2019/12/31 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
python的id()函数解密过程
2012/12/25 Python
Python中isnumeric()方法的使用简介
2015/05/19 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
义诊活动通知
2015/04/24 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书