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 相关文章推荐
模拟OICQ的实现思路和核心程序(二)
Oct 09 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
PHP系统命令函数使用分析
Jul 05 PHP
递归删除一个节点以及该节点下的所有节点示例
Mar 19 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
浅析iis7.5安装配置php环境
May 10 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
php的无刷新操作实现方法分析
Feb 28 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中simplexml_load_string使用实例分享
2014/02/13 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
php远程下载类分享
2016/04/13 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
7个JS基础知识总结
2014/03/05 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
vuex与组件联合使用的方法
2018/05/10 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
详解python中docx库的安装过程
2019/11/08 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
大学生自我鉴定
2013/12/08 职场文书
自我介绍演讲稿
2014/01/15 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
工地安全标语
2014/06/07 职场文书
销售顾问工作计划书
2014/08/15 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android