设计模式之单例模式

[TOCM]

使用目的,可以解决那些问题

简单说来,单例模式的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点。
假想我们的代码有多处用到数据库查询数据,这时候我们肯定希望有(且只有)一个对象可以提供链接数据库的功能(数据库连接开销比较大),这时候单例模式就可以实现我们的需求。

适用场景

数据库DB、Nosql DB。

基本步骤

  1. 将构造方法私有化,防止外部实例化
  2. 将__clone私有化,防止直接克隆对象克隆
  3. 提供一个私有的静态变量来保存自身实例
  4. 提供一个公开的方法,给外部提供自身实例

代码实现

<?php
final class sigle {

    protected static $instance;

    //将构造方法私有化,防止外部new
    private final function __construct () {}

    //防止直接克隆对象克隆
    protected final function __clone () {}

    /**
     * 开放给外部获取实例的方法
     * @return sigle
     */
    /**
     * 开放给外部获取实例的方法
     * @return Singleton
     */
    public static function getInstance()
    {
        if( !self::$instance instanceof self ) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}

$objA = sigle::getInstance();
$objB = sigle::getInstance();
if($objA === $objB) {
    echo '相同';
}

发表评论