设计模式 – 单例模式

缺点:

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

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

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

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

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

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

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

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

优点:

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

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

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

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
?>