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中将数组转成XML格式的实现代码
Aug 08 PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 PHP
PHP CLI模式下的多进程应用分析
Jun 03 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
对于PHP 5.4 你必须要知道的
Aug 07 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
php获取访问者IP地址汇总
Apr 24 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
Oct 08 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 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
ftp类(example.php)
2006/10/09 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
jquery foreach使用示例
2013/09/12 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
python简单贪吃蛇开发
2019/01/28 Python
Python函数和模块的使用总结
2019/05/20 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
小区门卫岗位职责
2013/12/31 职场文书
老同学聚会感言
2014/02/23 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
公务员政审个人总结
2015/02/12 职场文书
就业导师推荐信范文
2015/03/27 职场文书
阿凡达观后感
2015/06/10 职场文书
村主任当选感言
2015/08/01 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript