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生成静态页
Nov 25 PHP
PHP将回调函数作用到给定数组单元的方法
Aug 19 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
Oct 10 PHP
PHP实现批量修改文件名的方法示例
Sep 18 PHP
php策略模式简单示例分析【区别于工厂模式】
Sep 25 PHP
thinkphp5实现微信扫码支付
Dec 23 PHP
php实现文件上传基本验证
Mar 04 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 PHP
windows系统php环境安装swoole具体步骤
Mar 04 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技术开发技巧分享
2010/03/23 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
2020/11/04 Javascript
你应该知道的python列表去重方法
2017/01/17 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
python操作excel让工作自动化
2019/08/09 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
美术师范毕业生自荐信
2013/11/16 职场文书
文明教师事迹材料
2014/01/16 职场文书
道路交通安全实施方案
2014/03/12 职场文书
职称评定自我鉴定
2014/03/18 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
JS实现数组去重的11种方法总结
2022/04/04 Javascript