单例模式常用于实例化数据库连接的场景:在一个数据库操作脚本中, 我们可能需要反复对数据库做多种操作(增、删、改、查),每次对数据库的操作,都需要基于一个数据连接。如果每次数据库操作都新建一个新的数据库连接,那样对数据库就会造成更多的压力和资源浪费。事实上,同一脚本进程,不管你对数据库操作多少次,我们都可以始终复用同一个数据库连接,这就是单例模式的一种应用场景。
下面我们来看看ThinkPHP v3.2是如何使用单例模式来复用同一数据库连接的:
// ThinkPHP v3.2中使用单例模式实例化数据库驱动类:Db::getInstance();
// Db类文件路径:\thinkphp\Core\Library\Think\Db.class.php
namespace Think;
class Db {
static public function getInstance($config=array()) {
// 如果数据库驱动类未曾实例化,则new一个新的实例化对象。否则,直接返回已实例化的对象。
// 这个就是单例模式。
if(!isset(self::$instance[$md5])) {
......
self::$instance[$md5] = new $class($options);
......
}
self::$_instance = self::$instance[$md5];
return self::$_instance;
}
}