单例模式用于保证只有单个对象被创建 ,确保对象的唯一性。
示例应用有:
1)计算网站访问量时,可以使用单例模式创建计数器保证计算器的唯一性,并将计数器全局使用,这样即节约资源避免频繁创建销毁,又可以控制并发避免计算数据错误。
2)购物系统中的库存变更,使用单例模式创建库存对象,可以使库存变更在一个变量上,并用锁机制避免超卖。
单例模式原理:
创建一个唯一的对象,并全局使用它,设置锁机制保证多线程安全。
单例模式实现:
class SingleObj{
private static $instance = null;
private function __construct(){}
//获取单例
public static function getInstance()
{
//加锁,多线程安全
$file = __FILE__.'.lock';
$fp = fopen($file,'a');
if(flock($fp,LOCK_EX)){
if(!self::$instance){
self::$instance = new SingleObj();
}
fclose($fp);
unlink($file);
return self::$instance;
}
}
}