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 相关文章推荐
使用adodb lite解决问题
Dec 31 PHP
10个实用的PHP代码片段
Sep 02 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
php explode函数实例代码
Feb 27 PHP
基于empty函数的判断详解
Jun 17 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 PHP
Laravel实现autoload方法详解
May 07 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
PHP 计算两个特别大的整数实例代码
May 07 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 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
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
python获取本地计算机名字的方法
2015/04/29 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
Python反射的用法实例分析
2018/02/11 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
杭白菊导游词
2015/02/10 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
雷锋的故事观后感
2015/06/10 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle