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面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 PHP
php学习之流程控制实现代码
Jun 09 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
php读取大文件示例分享(文件操作类)
Apr 13 PHP
php中print(),print_r(),echo()的区别详解
Dec 01 PHP
php实现以只读方式打开文件的方法
Mar 16 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
PHP网页安全认证的实例详解
Sep 28 PHP
laravel框架的安装与路由实例分析
Oct 11 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
PHP中通过ADO调用Access数据库的方法测试不通过
2006/12/31 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
列表内容的选择
2006/06/30 Javascript
更正确的asp冒泡排序
2007/05/24 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
python调用shell的方法
2013/11/20 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
Python的argparse库使用详解
2018/10/09 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
仓库班组长岗位职责
2013/12/12 职场文书
平安建设实施方案
2014/03/19 职场文书
2014年教研员工作总结
2014/12/23 职场文书
党员个人年度总结
2015/02/14 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python