在Php编程中,单例模式虽然不是最常用,但一定是最不可缺少、应用非常广泛的一种设计模式,虽然你可能不太了解它,但只要你有过开发一个完成系统的经历,相信我,你一定使用过它。
介绍
单例模式(Singleton Pattern),也被成为单件模式,确保某个类只能有一个正在运行的实例,而且自行实例化并且向系统提供这个实例。有且只有一个 是单例模式最重要的特点。
特点
1.只能有一个实例。
2.必须自行创建这个实例。
3.必须给其他对象提供这一实例。
场景
比如在应用中需要一个日志记录对象,并且需要在整个系统中只使用这一个对象,这时候就需要单例模式。另外一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。
实现方式
实现一个静态的类方法getInstance(),这个方法只返回该类的唯一实例,当第一次调用这个方法的时候,它创建一个实例,吧它存在一个私有的静态变量之中,并且返回该实例,下一次,他只返回已经创建的实例。
例子
一个日志记录类。
<?php
/**
* 日志记录类
*/
class Logger
{
//私有化静态变量
static private $instance = NULL;
// 私有构造函数,防止实例化对象
private function __construct()
{
# code...
}
// 私有克隆函数
private function __clone(){
}
// 静态方法,统一访问入口
static public function getInstance(){
if(self::$instance == NULL){
self::$instance = new Logger();
}
return self::$instance;
}
static function Log($str)
{
}
}
?>
一般要使一个程序中只有一个实例时,会使用全局变量,但不同于面向过程,面向对象的程序设计中应当尽量避免全局变量的出现,所以使用单例模式是一个很好的选择。