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 万年历实现代码
Oct 18 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
调整PHP的性能
Oct 30 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
PHP输出缓冲控制Output Control系列函数详解
Jul 02 PHP
PHP不使用递归的无限级分类简单实例
Nov 05 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 PHP
asp函数split()对应php函数explode()
Feb 27 PHP
详解PHP神奇又有用的Trait
Mar 25 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 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 缓存函数代码
2008/08/27 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
PHP7内核之Reference详解
2019/03/14 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
详解Vue生命周期的示例
2017/03/10 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
使用pdb模块调试Python程序实例
2015/06/02 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
竞聘副主任科员演讲稿
2014/01/11 职场文书
汽车专业求职信
2014/06/05 职场文书
学生干部培训方案
2014/06/12 职场文书
军训口号
2014/06/13 职场文书
趵突泉导游词
2015/02/03 职场文书
九九重阳节致辞
2015/07/31 职场文书
Python集合set()使用的方法详解
2022/03/18 Python