首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计方式php实例:单例模式

2012-09-12 
设计模式php实例:单例模式单个类例模式要求一只能实例化一次,并且实例化的过程由该类自身执行。在一些情况

设计模式php实例:单例模式
单个类例模式要求一只能实例化一次,并且实例化的过程由该类自身执行。


在一些情况下系统只需要一个全局的对象,以协调整个系统的行为。在具体的php应用中单例模式可以封装应用的配置,数据库连接等其他资源的加载,以达到节省空间资源的效果。另外在多线程的情况下(php应用中中并不多),比如同时进行文件创建、打开、修改一个文件的操作时用单例可以实现锁机制。

单例模式在应用中减少了代码量,就像全局变量一样,用起来是挺爽的,但是它也有缺点,不能够滥用:单例模式不能扩展,想给单例加代码只能在原因类中改,违反开闭原则。它的隐式依赖引起的结构不清晰,客户端需要了解其结构。一般情况下其他代码对单例是一种依赖关系的调用,耦合度较大。


单例模式类图:

设计方式php实例:单例模式


ZF中单例代码实例:

class Zend_Controller_Front{...    protected static $_instance = null;...    protected function __construct()    {        $this->_plugins = new Zend_Controller_Plugin_Broker();    }    /**     * Enforce singleton; disallow cloning     *     * @return void     */    private function __clone()    {    }    public static function getInstance()    {        if (null === self::$_instance) {            self::$_instance = new self();        }        return self::$_instance;    }....}

上面列子中单例在外部调用的时候才加载,即所谓的“懒汉式”模式,另外一种“饿汗式”是在类初始化时候就回实例化本身。前者是以时间换空间,后者是以空间换时间,好在前者只消耗一次判断的时间,所有懒汉式单例模式在代码中用的较为多些。


热点排行