设计模式 – 单例模式

缺点:

单例和全局变量都可能被误用。

因为单例在系统任何地方都可以被访问,所以它们可会导致很难调试的依赖关系。

如果改变一个单例,那么所有使用该单例的类可能都会受到影响。

在这里依赖本身并不是问题。

毕竟,我们在每次声明一个特定类型参数的方法时,也就创建了依赖关系。

问题是,单例对象的全局化的性质会使程序员绕过类接口定义的通信线路。

当单例被使用时,依赖便会被隐藏在方法内部,而并不会出现在方法声明中。

这使得系统中的依赖关系更加难以追踪,因此需要谨慎小心地部署单例类。

优点:

适度地使用单例模式可以改进系统的设计。在系统中传递那些不必要的对象令人厌烦,而单例可以让你从中解放出来。

在面向对象的开发环境中,单例模式是一种对于全局变量的改进。

你无法用错误类型的数据复写一个单例。

<?php
class Preferences{
    private $props = array();
    private static $instance;

    private function __construct(){}

    public static function getInstance(){
        if(empty(self::$instance)){
            self::$instance = new Preferences();
        }
        return self::$instance;
    }

    public function setProperty($key, $val){
        $this->props[$key] = $val;
    }

    public function getProperty($key){
        return $this->props[$key];
    }
}

$pref = Preferences::getInstance();
$pref->setProperty("name","matt");

unset($pref); //移除引用

$pref2 = Preferences::getInstance();
print  $pref2->getProperty("name");

//输出  matt
?>