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自动跳转中英文页面
Jul 29 PHP
PHP通用分页类page.php[仿google分页]
Aug 31 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
Aug 05 PHP
php中使用DOM类读取XML文件的实现代码
Dec 14 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
Drupal7连接多个数据库及常见问题解决
Mar 02 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
Yii2实现log输出到file及database的方法
Nov 12 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
详解no input file specified 三种解决方法
Nov 29 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扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
用jscript启动sqlserver
2007/06/21 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
Python实现简单字典树的方法
2016/04/29 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
python连接PostgreSQL过程解析
2020/02/09 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
2013年军训通讯稿
2014/02/05 职场文书
诚信承诺书范文
2014/03/27 职场文书
单位租房协议书范本
2014/12/04 职场文书
2014年节能工作总结
2014/12/18 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL