PHP常用的三种设计模式


Posted in PHP onFebruary 17, 2017

一、首先来看,单例模式

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

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

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

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

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

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

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

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

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

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

1.只能有一个实例。

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

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

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

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

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

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

PHP 相关文章推荐
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
Jul 29 PHP
ThinkPHP登录功能的实现方法
Aug 20 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
UTF-8正则表达式如何匹配汉字
Aug 03 PHP
php array_key_exists() 与 isset() 的区别
Oct 24 PHP
php json_encode与json_decode详解及实例
Dec 13 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
thinkphp 多表 事务详解
2013/06/17 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
laravel自定义分页效果
2017/07/23 PHP
JS 建立对象的方法
2007/04/21 Javascript
用JavaScript调用WebService的示例
2008/04/07 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
python基础教程之匿名函数lambda
2017/01/17 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
windows下python安装pip方法详解
2020/02/10 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
python实现xml转json文件的示例代码
2020/12/30 Python
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
金智子午JAVA面试题
2015/09/04 面试题
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
荆州古城导游词
2015/02/06 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
python编写五子棋游戏
2021/05/25 Python
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle