magento中单例模式的变形实现
来源:互联网 发布:主人网络什么意思 编辑:程序博客网 时间:2024/05/17 05:57
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
一个典型的php单例模式实现如下:
<?php/*** php singleton pattern* @author newjueqi* @modify 2011-12-30* @website http://blog.csdn.net/newjueqi*/Class Test{ private function __construct(){} private function __clone(){} static private $_instance=NULL; //get single object public function getInstance(){ if( is_null( self::$_instance ) || !isset(self::$_instance) ){ self::$_instance=new Test(); } return self::$_instance; } public function debug(){ echo "hello"; }}Test::getInstance()->debug();Test::getInstance()->debug();
但这种方法有一个缺点,对于某个类,如果有时候我需要的是单个实例,有时候需要的是不同的实例,那怎么办呢?
对于以上的问题,在Magento中,由于Class Mage 是作用在整个request 过程,基于Mage的特点,Mage提供了两个static 方法: getModel() 和 getSingleton()
getModel():每次获取的是是不同的实例
getSingleton():每次获取的是是同一的实例
详细的代码如下:
/** * Retrieve model object * * @link Mage_Core_Model_Config::getModelInstance * @param string $modelClass * @param array $arguments * @return Mage_Core_Model_Abstract */ public static function getModel($modelClass = '', $arguments = array()) { return self::getConfig()->getModelInstance($modelClass, $arguments); } /** * Retrieve model object singleton * * @param string $modelClass * @param array $arguments * @return Mage_Core_Model_Abstract */ public static function getSingleton($modelClass='', array $arguments=array()) { $registryKey = '_singleton/'.$modelClass;//检测当前的对象是否已经存在,如果存在则取出来 if (!self::registry($registryKey)) { //self::getModel的用途是实例化对象,然后把对象通过self::register()保存, self::register($registryKey, self::getModel($modelClass, $arguments)); } return self::registry($registryKey); }
所以在一次请求过程中,每次使用Mage::getModel('XXX') 获得的都是不同的object,每次使用Mage::getSingleton('XXX') 获得的都是同一的object
[文章标题] magento中单例模式的变形实现
[文章作者]曾健生
[作者邮箱]zengjiansheng1@126.com
[作者QQ]190678908
[博客] http://blog.csdn.net/newjueqi
- magento中单例模式的变形实现
- Magento的观察者模式
- Magento的工厂模式
- Magento单例模式的实现与使用
- magento -- 打开magento开发的调试模式(开发者模式)
- magento -- 如何在magento中实现产品的批量上传
- magento -- 如何实现多语言的magento cms 页面
- 打开magento开发的调试模式
- 打开magento开发的调试模式
- magento -- magento开发第一步-修改magento的代码实现特定的功能
- java 工厂模式变形的多种应用
- magento后台加form表单页面变形
- win32程序的变形窗口的实现
- 打开magento开发的调试模式(开发者模式)
- C#实现图片的任意四边形变形
- 拖拽四边形的四角实现变形
- 含有可变形参的实现
- ios回调的一种变形实现
- IDHTTP的基本用法
- 关于string.Join()的妙用与疑惑
- Android的Linux内核的电源管理:Early Suspend
- Android 动画框架详解 1
- Mozilla FireFox Gecko内核源代码解析(1.nsParser)
- magento中单例模式的变形实现
- hibernate执行sql语句的总结
- 腾讯弹出新闻(强制性、不会自动关闭),是否让你觉得不爽?
- 导入excel
- 对DirectFB窗口管理器(unique)的研究
- 《The Missing Manual Javascript 》 - 书摘精要
- Android.mk中加入选项,编译生成可以直接安装的apk包
- 给程序员的VIM速查卡
- 回发或回调参数无效