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 session处理的定制
Mar 16 PHP
php中函数的形参与实参的问题说明
Sep 01 PHP
在php和MySql中计算时间差的方法
Apr 22 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
Dec 27 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
Feb 16 PHP
Yii2中添加全局函数的方法分析
May 04 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 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
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
python实现多人聊天室
2020/03/31 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
怎么写好自荐书
2014/03/02 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
相亲大会策划方案
2014/06/05 职场文书
2014年施工员工作总结
2014/11/18 职场文书
家属答谢词
2015/01/05 职场文书
鲁迅故居导游词
2015/02/05 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
初中团支书竞选稿
2015/11/21 职场文书