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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
收集的PHP中与数组相关的函数
Mar 22 PHP
Php注入点构造代码
Jun 14 PHP
php相当简单的分页类
Oct 02 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
Aug 05 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
thinkphp项目如何自定义微信分享描述内容
Feb 20 PHP
PHP保留两位小数的几种方法
Jul 24 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 PHP
php7 图形用户界面GUI 开发示例
Feb 22 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
我的论坛源代码(七)
2006/10/09 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
谈谈node.js中的模块系统
2020/09/01 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
wxpython实现图书管理系统
2018/03/12 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
Python 处理图片像素点的实例
2019/01/08 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
pycharm的python_stubs问题
2020/04/08 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
django教程如何自学
2020/07/31 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
银行实习的自我鉴定
2013/12/10 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
简历里的自我评价
2014/01/31 职场文书
给孩子的新年寄语
2014/04/08 职场文书
对照检查剖析材料
2014/09/30 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
大国崛起英国观后感
2015/06/02 职场文书
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技