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+xslt在windows平台上
Oct 09 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
php去除html标记的原生函数详解
Jan 27 PHP
php读取文件内容到数组的方法
Mar 16 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
10个php函数实用却不常见
Oct 13 PHP
Yii快速入门经典教程
Dec 28 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
php网页版聊天软件实现代码
Aug 12 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 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使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
微信小程序自定义弹窗wcPop插件
2018/11/19 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
python suds访问webservice服务实现
2020/06/26 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
全球性的在线购物网站:Zapals
2017/03/22 全球购物
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
技术总监个人的自我评价范文
2013/12/18 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
地道战观后感2000字
2015/06/04 职场文书
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP
JS高级程序设计之class继承重点详解
2022/07/07 Javascript
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技