@a5635268
2016-02-29T16:23:57.000000Z
字数 793
阅读 1118
PHP
设计模式
保证一个类仅有一个实例,并且提供一个访问它的全局访问点
Singleton定义一个getInstance操作,允许客户访问它的唯一实例。getInstance是一个类方法。负责创建它的唯一的实例。
一个需要重复操作的对象,如数据库链接对象,在一个访问生命周期中,需要多处使用,甚至要使用在循环中;
<?php
/**
* 懒汉式单例类。因为PHP不支持在类定义时给类的成员变量赋予非基本类型的值。如表达式,new操作等等,所以不支持
*/
class Singleton {
/**
* 静态成品变量 保存全局实例
*/
private static $_instance = NULL;
/**
* 私有化默认构造方法,保证外界无法直接实例化
*/
private function __construct() {
}
/**
* 静态工厂方法,返还此类的唯一实例
*/
public static function getInstance() {
if (is_null(self::$_instance)) {
self::$_instance = new Singleton();
}
return self::$_instance;
}
/**
* 防止用户克隆实例
*/
public function __clone(){
die('Clone is not allowed.' . E_USER_ERROR);
}
/**
* 测试用方法
*/
public function test() {
echo 'Singleton Test!';
}
}
/**
* 客户端
*/
class Client {
/**
* Main program.
*/
public static function main() {
$instance = Singleton::getInstance();
$instance->test();
}
}
Client::main();