PHP常用的三种设计模式


Posted in PHP onFebruary 17, 2017

一、首先来看,单例模式

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

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

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

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

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

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

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

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

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

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

1.只能有一个实例。

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

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

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

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

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

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

PHP 相关文章推荐
PHP动态图像的创建
Oct 09 PHP
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
php include,include_once,require,require_once
Sep 05 PHP
php上传文件的增强函数
Jul 21 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
ext 代码生成器
2009/08/07 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
Python 爬虫模拟登陆知乎
2016/09/23 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
C#软件工程师英语面试题
2015/06/07 面试题
劳动仲裁调解书
2015/05/20 职场文书
PHP新手指南
2021/04/01 PHP
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
小程序wx.getUserProfile接口的具体使用
2021/06/02 Javascript