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 相关文章推荐
杏林同学录(八)
Oct 09 PHP
PHP Document 代码注释规范
Apr 13 PHP
PHP APC的安装与使用详解
Jun 13 PHP
php操作xml
Oct 27 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
Jun 12 PHP
Chrome Web App开发小结
Sep 04 PHP
PHP实现大数(浮点数)取余的方法
Feb 18 PHP
php实现数据库的增删改查
Feb 26 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
PHP getName()函数讲解
Feb 03 PHP
php数组和链表的区别总结
Sep 20 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 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下使用SMTP发邮件的代码
2008/01/10 PHP
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
原生js实现日历效果
2020/03/02 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
python统计一个文本中重复行数的方法
2014/11/19 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
基于python3实现倒叙字符串
2020/02/18 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
护士自荐信怎么写
2013/10/18 职场文书
商场经理竞聘演讲稿
2014/01/01 职场文书
大二学期个人自我评价
2014/01/13 职场文书
护士辞职信模板
2014/01/20 职场文书
小学安全教育材料
2014/02/17 职场文书
校长寄语大全
2014/04/09 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
Python语言中的数据类型-序列
2022/02/24 Python
Docker下安装Oracle19c
2022/04/13 Servers