PHP常用的三种设计模式


Posted in PHP onFebruary 17, 2017

一、首先来看,单例模式

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

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

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

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

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

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

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

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

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

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

1.只能有一个实例。

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

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

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

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

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

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

PHP 相关文章推荐
pdo中使用参数化查询sql
Aug 11 PHP
深入解析phpCB批量转换的代码示例
Jun 27 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 PHP
php判断并删除空目录及空子目录的方法
Feb 11 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
CodeIgniter框架常见用法工作总结
Mar 16 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
php命令行写shell实例详解
Jul 19 PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 14 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
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
python实现html转ubb代码(html2ubb)
2014/07/03 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
一道python走迷宫算法题
2018/01/22 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
留学生如何写好自荐信
2013/12/27 职场文书
理工大学毕业生自荐信范文
2014/02/22 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
三峡大坝导游词
2015/01/31 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL