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 相关文章推荐
apache2.2.4+mysql5.0.77+php5.2.8安装精简
Apr 29 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
php操作xml
Oct 27 PHP
PHP随机生成信用卡卡号的方法
Mar 23 PHP
php数组合并与拆分实例分析
Jun 12 PHP
PHP文件操作方法汇总
Jul 01 PHP
php bootstrap实现简单登录
Mar 08 PHP
php 读取输出其他文件的实现方法
Jul 26 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 PHP
PHP优化之批量操作MySQL实例分析
Apr 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人民币金额数字转中文大写的函数代码
2013/02/27 PHP
php实现查看邮件是否已被阅读的方法
2013/12/03 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
PHP asXML()函数讲解
2019/02/03 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
迪奥官网:Dior.com
2018/12/04 全球购物
客服实习的个人自我鉴定
2013/10/20 职场文书
社区母亲节活动总结
2015/02/10 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
2016年寒假家长评语
2015/10/10 职场文书
高一军训口号
2015/12/25 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python