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

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


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

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


单例模式类图:

设计模式php实例:单例模式_第1张图片


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;
    }
....
}

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


你可能感兴趣的:(设计模式php实例:单例模式)