PHP常用设计模式之单例模式

  作者:bea

模式就像是OOP开发人员的配方,每种模式都提供了所需的成分。我们可以自定义模式的元素来解决特定的编程问题。单例模式就是PHP常用到的设计模式之一。 在OOP中,一个对象之负责一个特定的任务通常是一种很好的做法。例如,你也许希望只让一个对象去访问数据库。单例模式被认为是职责模式,这是因为它将创建对象的控制委托到一个单一的访问点上。在任何时候,应用程序中都只会有这个类仅有的一个实例存在。 多有的单例类至少拥有以下三种公共元素: 1、它们必须拥有一个构造函数,并且该构造函数必须使
模式就像是OOP开发人员的配方,每种模式都提供了所需的成分。我们可以自定义模式的元素来解决特定的编程问题。单例模式就是PHP常用到的设计模式之一。
在OOP中,一个对象之负责一个特定的任务通常是一种很好的做法。例如,你也许希望只让一个对象去访问数据库。单例模式被认为是职责模式,这是因为它将创建对象的控制委托到一个单一的访问点上。在任何时候,应用程序中都只会有这个类仅有的一个实例存在。

多有的单例类至少拥有以下三种公共元素:
1、它们必须拥有一个构造函数,并且该构造函数必须使受保护的。即有关键字private关键字修饰。
2、它们拥有一个保存类的实例的静态成员变量。强调是静态的成员变量。
3、它们拥有一个访问这个实例的公共的静态方法。

下面举一个单例模式的例子:
class Person{
private $name;
static $instance; //保存Person类的实例

private function __construct($name){ //必须有private修饰
$this->name=$name;
}

private __clone(); //防止对象被复制或克隆

public static function getInstance(){
if(!(self::$instance instanceof self)){
self::$instance = new self(); //实例化Person对象
}
return self::$instance; //返回该对象
}

public function run(){
echo $this->name."正在跑步";
}
}
现在,你已经看到了如何申明一个单例类,但是该如何使用它呢?
请看如下的代码:
$person = Person::getInstance();
$person->run();
通过调用getInstance()方法,$instance现在存有内部存储实例的引用。 有用  |  无用

猜你喜欢