11/06/2008

Singleton pattern in PHP 5

1类别: 创建型设计模式
2意图: 确保一个类只有一个实例,而且自行向整个系统提供这一个实例(类本身提供一个实例的全局访问点)
3代码:


class Singleton {
// 用静态变量来存储signleton的实例
private static $_instance;
// 私有的构造器阻止New
private function __construct() {
...
}

// 避免除了New外,用户可以通过clone和序列化来获得多个singleton的实例
public function __clone() {
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
public function __wakeup() {
trigger_error('Deserializing is not allowed.', E_USER_ERROR);
}
//用layz load 的方法,获得唯一实例
public static function getInstance() {
if (!self::$instance instanceof self) {
self::$instance = new self;
}
return self::$instance;
}
//singleton的实际作用
public function doAction() {
...
}
}

//usage
Singleton::getInstance()->doAction();

?>






更多: http://www.tonymarston.net/php-mysql/singleton.html
http://en.wikipedia.org/wiki/Singleton_pattern

No comments: