PHP常用的三种设计模式


Posted in PHP onFebruary 17, 2017

一、首先来看,单例模式

所谓单例模式,即在应用程序中只会有这个类的一个实例存在。

通常单例模式用在仅允许数据库访问对象的实例中,从而防止打开多个数据库连接。

一个单例类应包括以下几点:

和普通类不同,单例类不能被直接实例化,只能是由自身实例化。因此,要获得这样的限制效果,构造函数必须标记为private。

要让单例类不被直接实例化而能起到作用,就必须为其提供这样的一个实例。因此,就必须要让单例类拥有一个能保存类的实例的私有静态成员变量和对应的一个能访问到实例的公共静态方法。

在PHP中,为防止对单例类对象的克隆来打破单例类的上述实现形式,通常还为基提供一个空的私有__clone()方法。

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。

单例模式分3种:懒汉式单例、饿汉式单例、登记式单例。

单例模式有以下3个特点:

1.只能有一个实例。

2.必须自行创建这个实例。

3.必须给其他对象提供这一实例。

那么为什么要使用PHP单例模式?

PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。

在以往的项目开发中,没使用单例模式前的情况如下:未完....

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
php.ini中的php-5.2.0配置指令详解
Mar 27 PHP
PHP goto语句简介和使用实例
Mar 11 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
php实现网站文件批量压缩下载功能
Oct 28 PHP
PHP图形计数器程序显示网站用户浏览量
Jul 20 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
php图片裁剪函数
Oct 31 PHP
php分享朋友圈的实现代码
Feb 18 PHP
thinkphp5 路由分发原理
Mar 18 PHP
轻松实现php文件上传功能
Feb 17 #PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 #PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
Feb 17 #PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 #PHP
php使用str_shuffle()函数生成随机字符串的方法分析
Feb 17 #PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 #PHP
PHP中单例模式与工厂模式详解
Feb 17 #PHP
You might like
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
如何编写jquery插件
2017/03/29 jQuery
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
在Django的视图中使用form对象的方法
2015/07/18 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
Python全排列操作实例分析
2018/07/24 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
浅析python标准库中的glob
2020/03/13 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
Spy++的使用方法及下载教程
2021/01/29 Python
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
火灾现场处置方案
2014/05/28 职场文书
消防安全宣传标语
2014/06/07 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
检讨书格式
2015/05/07 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL