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 相关文章推荐
批量修改RAR文件注释的php代码
Nov 20 PHP
php 获取全局变量的代码
Apr 21 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
PHP实现的oracle分页函数实例
Jan 25 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
PHP 并发场景的几种解决方案
Jun 14 PHP
laravel-admin的图片删除实例
Sep 30 PHP
在 Laravel 中动态隐藏 API 字段的方法
Oct 25 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 PHP
tp5.1 框架数据库-数据集操作实例分析
May 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
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
PHP时间处理类操作示例
2018/09/05 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
JavaScript prototype属性使用说明
2010/05/13 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
Vue的Class与Style绑定的方法
2017/09/01 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
Python学习入门之区块链详解
2017/07/25 Python
python实现批量视频分帧、保存视频帧
2019/05/31 Python
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
水电工岗位职责
2014/02/12 职场文书
热门专业求职信
2014/05/24 职场文书
会计专业求职信
2014/08/10 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
Python 阶乘详解
2021/10/05 Python