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 相关文章推荐
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
Mar 19 PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 PHP
PHP生成Gif图片验证码
Oct 27 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
zend framework中使用memcache的方法
Mar 04 PHP
浅谈php和js中json的编码和解码
Oct 24 PHP
PHP常用函数之base64图片上传功能详解
Oct 21 PHP
php的无刷新操作实现方法分析
Feb 28 PHP
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
Mar 29 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 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面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
PHP实现阿里大鱼短信验证的实例代码
2017/07/10 PHP
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
Python整数对象实现原理详解
2019/07/01 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
机械制造与自动化应届生求职信
2013/11/16 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
德语专业求职信
2014/03/12 职场文书
生日主持词
2014/03/20 职场文书
施工安全承诺书
2014/05/22 职场文书
设计大赛策划方案
2014/06/13 职场文书
热情服务标语
2014/10/07 职场文书
医学生自荐信范文
2015/03/05 职场文书
2015年大学生实习评语
2015/03/25 职场文书
聘任通知书
2015/09/21 职场文书