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 高效率写法 推荐
Feb 21 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
Aug 07 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
php+mysqli数据库连接的两种方式
Jan 28 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
Feb 23 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
PHP将身份证正反面两张照片合成一张图片的代码
Apr 08 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
Thinkphp5.0 框架Model模型简单用法分析
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
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
PHP文件上传类实例详解
2016/04/08 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
Element Input组件分析小结
2018/10/11 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
Python代码缩进和测试模块示例详解
2018/05/07 Python
pandas 选择某几列的方法
2018/07/03 Python
python中实现控制小数点位数的方法
2019/01/24 Python
Django 反向生成url实例详解
2019/07/30 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
介绍一下SQL Server的全文索引
2013/08/15 面试题
生产厂长岗位职责
2014/02/21 职场文书
机关作风建设自查报告
2014/10/22 职场文书
业务员岗位职责
2015/02/03 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript