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 获取客户端真实IP地址多种方法小结
May 15 PHP
php 数组的指针操作实现代码
Feb 08 PHP
基于curl数据采集之正则处理函数get_matches的使用
Apr 28 PHP
PHP curl 获取响应的状态码的方法
Jan 13 PHP
PHP命名空间(Namespace)简明教程
Jun 11 PHP
PHP中strlen()和mb_strlen()的区别浅析
Jun 19 PHP
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
yii2 页面底部加载css和js的技巧
Apr 21 PHP
PHP实现websocket通信的方法示例
Aug 28 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 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
smarty循环嵌套用法示例分析
2016/07/19 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
Javascript实现的分页函数
2007/02/07 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
js查找节点的方法小结
2015/01/13 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
python简单程序读取串口信息的方法
2015/03/13 Python
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
python mysql中in参数化说明
2020/06/05 Python
Python 可视化神器Plotly详解
2020/12/26 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
生产经理的自我评价分享
2013/11/07 职场文书
该怎么书写道歉信?
2019/07/03 职场文书