设计模式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;
    }
....
}

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值