php设计模式之单例、多例设计模式的应用分析


Posted in PHP onJune 30, 2013

单例(Singleton)模式和不常见的多例(Multiton)模式控制着应用程序中类的数量。如模式名称,单例只能实例化一次,只有一个对象,多例模式可以多次实例化。

基于Singleton的特性,我们经常用Singleton配置应用程序并定义应用程序中可能随时访问的变量。但有时并不推荐使用Singleton,因为它生成了一个全局状态且

该单一根对象没有封装任何系统功能。多数情况下,会使单元测试和调试变得困难。读者根据情况自行决定。
代码示例:

<?php
class SingletonExample{
    private function __construct(){}//防止直接实例化
  public static function getInstance(){ //不与任何对象有关联
 static $instance=null;    //调用此函数的所有代码共享该变量,不必要让其是类的静态变量
 if($instance==null){
   $instance=new SingletonExample();
     }
   return $instance;
  }
}
$obj1=SingletonExample::getInstance();
$obj2=SingletonExample::getInstance();
var_dump($obj1===$obj2);// true   是同一个实例
?>

Multiton与singleton相似,不同的是后者需要getInstance()函数传递关键值。
对于给定的关键值只会存在唯一的对象实例,如果有多个节点,每个节点拥有唯一的表识符,且各个节点在某单次执行(如cms里的节点)可能出现多次,那么就可以用Multiton模式实现这些节点啊,Multiton节省内存,并确保同一个对象的多个实例不发生冲突.
示例:
 <?php
 class MultitonExample{
 private function __construct(){}//防止直接实例化   public static function getInstance($key){ 
  static $instance=array();    
  if(!array_key_exists($key,$instance)){
    $instance[$key]=new SingletonExample();
      }
    return $instance($key);
   }
 };
 ?>
PHP 相关文章推荐
探讨php中header的用法详解
Jun 07 PHP
使用php实现截取指定长度
Aug 06 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
php实现递归的三种基本方式
Jul 04 PHP
Yii2如何批量添加数据
May 17 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
Smarty模板语法详解
Jul 20 PHP
PHP连续签到功能实现方法详解
Dec 04 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 PHP
php获取$_POST同名参数数组的实现介绍
Jun 30 #PHP
深入解析php中的foreach问题
Jun 30 #PHP
浅析Apache中RewriteCond规则参数的详细介绍
Jun 30 #PHP
浅析关于PHP位运算的简单权限设计
Jun 30 #PHP
PHP删除HTMl标签的三种解决方法
Jun 30 #PHP
PHP删除HTMl标签的实现代码
Jun 30 #PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 #PHP
You might like
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
python实现excel读写数据
2021/03/02 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
Python sep参数使用方法详解
2020/02/12 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
python3中确保枚举值代码分析
2020/12/02 Python
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
连锁经营管理专业大学生求职信
2013/10/30 职场文书
公司财务工作总结的自我评价
2013/11/23 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
农业生产宣传标语
2014/10/08 职场文书
写给同事的离职感言
2015/08/04 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang