第2课:设计模式之单例模式

单例模式可能是设计模式中最简单的模式,很多时候,我甚至觉得不应该叫设计模式,只是一个编码技巧

接下来我们看看什么是单例模式

单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个类只有一个实例
也就是说,不管程序多复杂,在一个页面new了多少次某个类,如果这个类初始化用单例模式,就只会被创建一次,其他的new会复用第一次的创建,不会多次初始化
这样的好处是显而易见的,如果初始化里有数据库连接操作,如果有大数组循环,省下来的开销是很可观的

那么,如何做到呢?下面用代码例子来说明

class Test {

    //保存例实例在此属性中
    private static $_instance;

    //构造函数声明为private,防止直接创建对象
    private function __construct() {
        echo '我被实例化了!';
    }

    //单例方法
    public static function getInstance()
    {
        //var_dump(isset(self::$_instance));
        
        if(!isset(self::$_instance)) {
            self::$_instance=new self();
        }
        return self::$_instance;
    }

    //阻止用户复制对象实例
    private function __clone() {
        trigger_error('Clone is not allow', E_USER_ERROR);
    }

    function godeye() {
        echo("www.godeye.org");
    }
}
从上面代码可以看出,static $_instance用一个静态变量存初始化值,第二次调用getInstance初始化的时候,会先判断$_instance有没有值,有值的话就不再初始化
以此来实现单例模式