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
















原创粉丝点击