学习php这么久,虽然设计模式遇到不少,但是都没有深究,最近有时间准备研究下php的设计模式,我们就从“单例模式”开始。
单例模式,顾名思义只有一个实例。单例模式确保某一个类只有一个实例,它不会创建实例副本,而是利用自身的方法自行实例化。首先我们看一个例子:
class OpenStack{ private static $instance = null; //注意一定要是静态私有变量private function __construct(){ //构造函数一定为私有,否则外部可以直接实例化该类 } public static function getInstance(){ //该函数应为公有,保证外部可以直接调用,实例化本身;内部应判断该类实例是否存在,否则生成该实例 if(self::$instance == null){ self::$instance = new self(); } return self::$instance; }
}
在这里我们可以看到,由于该OpenStack类的构造函数是私有的,所以这个类并不能在外部直接实例化,只能通过getInstance()这个共有的方法来操作。
在该方法的内部,我们首先要判断$instance是否存在,不存在的话就实例化该类本身,赋给$instance。否则就直接返回$instance,这样就能保证该应用中只存在该类的一个实例,避免了多次new OpenStack()产生的资源开销。