PHP面向对象编程设计模式(二)单例模式

时间:2022-10-23 19:35:19

  在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)
{


}
}

?>

  
一般要使一个程序中只有一个实例时,会使用全局变量,但不同于面向过程,面向对象的程序设计中应当尽量避免全局变量的出现,所以使用单例模式是一个很好的选择。