缺点:
单例和全局变量都可能被误用。
因为单例在系统任何地方都可以被访问,所以它们可会导致很难调试的依赖关系。
如果改变一个单例,那么所有使用该单例的类可能都会受到影响。
在这里依赖本身并不是问题。
毕竟,我们在每次声明一个特定类型参数的方法时,也就创建了依赖关系。
问题是,单例对象的全局化的性质会使程序员绕过类接口定义的通信线路。
当单例被使用时,依赖便会被隐藏在方法内部,而并不会出现在方法声明中。
这使得系统中的依赖关系更加难以追踪,因此需要谨慎小心地部署单例类。
优点:
适度地使用单例模式可以改进系统的设计。在系统中传递那些不必要的对象令人厌烦,而单例可以让你从中解放出来。
在面向对象的开发环境中,单例模式是一种对于全局变量的改进。
你无法用错误类型的数据复写一个单例。
<?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 ?>