PHP设计模式之单例模式

  学习设计模式最难的事情就是理解什么样的设计模式适用于什么样的场景。

  单例模式是一种创建型模式,它会限制应用程序,使其只能创建某以特定类类型的一个单一的实例。

单例模式的实现

  1.我们可以在类中使用一个静态属性,来保证对于一个特定的类来说只存在一个单一的实例。

class Payment{
    static private $_instance = NULL;

}

  

  2.接下来,我们需要在类中创建一个静态方法,在类的实例不存在的时候,此方法将会创建一个这个类的实例,并且返回这个实例。

static function getInstance(){
    if(self::$_instance == NULL){
        self::$_instance = new Payment();
    }
    return self::$_instance;
}

  通常情况下,单例模式中的这个方法的名字命名为getInstance(),在这个方法中,会有一个条件语句用于检查$_inistance属性是否是一个NULL值。如果是,将会使用new关键字实例化自身,并赋值给这个属性,否则直接返回这个属性。

  

  3.现在这个类可以按照这个方法使用:

$pay = Payment::getInstance();

 

单例模式的改进

  如果一个用户试图使用 new 或
clone
去创建这个类的新对象,那么就会得到多个实例,这样就破坏了单例模式的限制。

  防止这种情况发生的一个技巧就是创建一个私有的构造函数:

private function __construct(){}
private function __clone(){}

  此时,用户尝试使用new去实例化这个类,程序就会产生一个错误。

 

使用场景举例

  单例模式是在一些限制必须使用单一实例的场景中。例如,一个公司有且只有一个财务中心,公司的所有资金流入流出、财务制度等都由这个财务中心来管理。

  

  

相关文章