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远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
php 获取SWF动画截图示例代码
Feb 10 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
Nov 07 PHP
简单说说PHP优化那些事(经验分享)
Nov 27 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
php微信公众号js-sdk开发应用
Nov 28 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
PHP通过文件路径获取文件名的实例代码
Oct 14 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 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 session 检测和注销
2009/03/16 PHP
PHP explode()函数用法、切分字符串
2012/10/03 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
jQuery创建折叠式菜单
2019/06/15 jQuery
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
Python写的贪吃蛇游戏例子
2014/06/16 Python
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
python中@contextmanager实例用法
2021/02/07 Python
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
中学生爱国演讲稿
2013/12/31 职场文书
文明学生事迹材料
2014/01/29 职场文书
安全协议书范本
2014/04/21 职场文书
河童之夏观后感
2015/06/11 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript