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中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
php自定义函数转换html标签示例
Sep 29 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 PHP
Laravel validate error处理,ajax,json示例
Oct 25 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
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
培养自己的php编码规范
2015/09/28 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
初探nodeJS
2017/01/24 NodeJs
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
Python实现字符串格式化输出的方法详解
2017/09/20 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
keras 多任务多loss实例
2020/06/22 Python
Python实现区域填充的示例代码
2021/02/03 Python
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
linux面试题参考答案(5)
2016/11/05 面试题
《夸父追日》教学反思
2014/02/26 职场文书
司法所长先进事迹
2014/06/02 职场文书
高中社区服务活动报告
2015/02/05 职场文书
中学生学习保证书
2015/02/26 职场文书