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