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的array_diff()函数在处理大数组时的效率问题
Nov 27 PHP
Mysql中分页查询的两个解决方法比较
May 02 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
Oct 17 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
PHP中Session可能会引起并发问题
Jun 26 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
Twig模板引擎用法入门教程
Jan 20 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
php过滤危险html代码
2008/08/18 PHP
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
Firefox下无法正常显示年份的解决方法
2014/09/04 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
Python 文件和输入输出小结
2013/10/09 Python
Python 功能和特点(新手必学)
2015/12/30 Python
Python数据类型详解(二)列表
2016/05/08 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
一道python走迷宫算法题
2018/01/22 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
python创建文件备份的脚本
2018/09/11 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
Django配置文件代码说明
2019/12/04 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
高三自我鉴定
2013/10/23 职场文书
学习方法演讲稿
2014/05/10 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书