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

  在Php编程中,单例模式虽然不是最常用,但一定是最不可缺少、应用非常广泛的一种设计模式,虽然你可能不太了解它,但只要你有过开发一个完成系统的经历,相信我,你一定使用过它。

介绍

单例模式(Singleton Pattern),也被成为单件模式,确保某个类只能有一个正在运行的实例,而且自行实例化并且向系统提供这个实例。有且只有一个 是单例模式最重要的特点。

特点

1.只能有一个实例。

2.必须自行创建这个实例。

3.必须给其他对象提供这一实例。

场景

比如在应用中需要一个日志记录对象,并且需要在整个系统中只使用这一个对象,这时候就需要单例模式。另外一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。

实现方式

  实现一个静态的类方法getInstance(),这个方法只返回该类的唯一实例,当第一次调用这个方法的时候,它创建一个实例,吧它存在一个私有的静态变量之中,并且返回该实例,下一次,他只返回已经创建的实例。

例子

一个日志记录类。


/**
* 日志记录类
*/
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)
    {

    }
}

?>

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

你可能感兴趣的:(php,php进阶之道)