PHP中单例模式与工厂模式详解


Posted in PHP onFebruary 17, 2017

单例模式概念

单例模式是指整个应用中类只有一个对象实例的设计模式。

单例模式的特点

一个类在整个应用中只有一个实例

类必须自行创建这个实例

必须自行向整个系统提供这个实例

php中使用单例模式的原因

我用php大部分操作都是和各种数据库打交道,包括mysql,redis,memcache等各种关系型和非关系型数据库,所以一个应用中会 存在大量连接数据库的操作,如果不用单例模式,那每次都要new操作,但是每次new都会消耗大量的内存资源和系统资源,而且每次打开和关闭数据库连接都 是对数据库的一种极大考验和浪费。

需要一个保存类的唯一实例的静态成员变量(通常$instance为私有变量)

构造函数和克隆函数必须声明为私有的,为了防止外部程序new类从而失去单例模式意义

必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用

//设计模式
//单例模式 都是使用同一个对象
//class Ren
//{
// public $name;
// private static $dx; //存储对象
//
// private function __construct()
// {
//
// }
//
// public static function DuiXiang()
// {
//  if(empty(self::$dx))
//  {
//   self:;$dx=new Ren();
//  }
//  return self::$dx;
// }
//}
//
//$r= Ren::DuiXiang();
//把构造函数变为私有
//做了一个方法来间接造对象
//在该方法里面加限制

工厂类

是指包含一个专门用来创建其他对象的方法的类,工厂类在多态性编程实践中是至关重要的,它允许动态的替换类,修改配置,通常会使应用程序更加灵活,熟练掌握工厂模式高级PHP开发人员是很重要的。

工厂模式通常用来返回符合类似接口的不同的类,工厂的一种常见用法就是创建多态的提供者,从而允许我们基于应用程序逻辑或者配置设置来决定应实例化哪一个类,例如,可以使用这样的提供者来扩展一个类,而不需要重构应用程序的其他部分,从而使用新的扩展后的名称 。

通常,工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,工厂方法可以任意命名,这个静态还可以接受任意数据的参数,必须返回一个对象。

class YunSuan
{
 public $a;
 public $b;
 function Suan()
 {
  echo "对两个数进行运算";
 }
class gongchang
{ //功能 : 给一个参数,返回一个对象
 static function chanpin($name)
 {
  switch($name)
  {
   case "'+":
    return new jia();
    break;
   case "-";
    return new jian();
    break;
  }
 }
}
$a=gongchang::chanpin("+");

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

PHP 相关文章推荐
php实现ping
Oct 09 PHP
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
Oct 09 PHP
支持中文的php加密解密类代码
Nov 27 PHP
php设计模式小结
Feb 15 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
php自定义session示例分享
Apr 22 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
PHP+JS实现的商品秒杀倒计时用法示例
Nov 15 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
PHP中使用mpdf 导出PDF文件的实现方法
Oct 22 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 #PHP
PHP合并数组函数array_merge用法分析
Feb 17 #PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 #PHP
php利用imagemagick实现复古老照片效果实例
Feb 16 #PHP
php UNIX时间戳用法详解
Feb 16 #PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 #PHP
php实现文件与16进制相互转换的方法示例
Feb 16 #PHP
You might like
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
php blowfish加密解密算法
2016/07/02 PHP
php处理复杂xml数据示例
2016/07/11 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
JavaScript学习笔记之数组的增、删、改、查
2016/03/23 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
python从入门到精通(DAY 2)
2015/12/20 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
python 二维矩阵转三维矩阵示例
2019/11/30 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
Python如何使用input函数获取输入
2020/08/06 Python
python 实现音频叠加的示例
2020/10/29 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
统计系教授推荐信
2014/02/28 职场文书
小学家长评语大全
2014/04/16 职场文书
义诊活动总结
2015/02/04 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
城南旧事电影观后感
2015/06/16 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书