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版(2)
Oct 09 PHP
PHP制作图型计数器的例子
Oct 09 PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
PHP实现的增强性mhash函数
May 27 PHP
php基于PDO实现功能强大的MYSQL封装类实例
Feb 27 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
Laravel多用户认证系统示例详解
Mar 13 PHP
PHP实现随机数字、字母的验证码功能
Aug 01 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
ajax取消挂起请求的处理方法
2013/03/18 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
微信小程序仿朋友圈发布动态功能
2018/07/15 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
python比较两个列表大小的方法
2015/07/11 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
python os.fork() 循环输出方法
2019/08/08 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
简历的自荐信
2013/12/19 职场文书
狼和鹿教学反思
2014/02/05 职场文书
大队干部竞选演讲稿
2014/04/28 职场文书
根叔历年演讲稿
2014/05/20 职场文书
个人简历自荐信
2014/06/26 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
民事二审代理词
2015/05/25 职场文书
工作证明书
2015/06/15 职场文书
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL