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 购物车实例(申精)
May 11 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
提高PHP性能的编码技巧以及性能优化详细解析
Aug 24 PHP
php获取本周开始日期和结束日期的方法
Mar 09 PHP
php事件驱动化设计详解
Nov 10 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
Nov 22 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
Yii2实现自定义独立验证器的方法
May 05 PHP
php实现留言板功能(会话控制)
May 23 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 PHP
php 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
我用php+mysql写的留言本
2006/10/09 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP session 会话处理函数
2016/06/06 PHP
JS模板实现方法
2013/04/03 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python DataFrame 取差集实例
2019/01/30 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
美国内衣品牌:Leonisa
2016/08/14 全球购物
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
纽约海:Sea New York
2018/11/04 全球购物
新加坡交友网站:be2新加坡
2019/04/10 全球购物
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
资产评估专业大学生求职信
2013/09/29 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
《学棋》教后反思
2014/04/14 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
普通党员整改措施
2014/10/24 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript