单例模式(Singleton Pattern):确保某一个类只有一个实例且自行实例化并向整个系统提供这个实例,这个类称之为单例类,它提供全局访问的方法。
单例模式的要点有三个:
<?php class Singleton{ //用于保存实例 private static $instance; //防止外部创建实例 private function __construct(){} //防止复制实例 private function __clone(){} public $test_text; //公有方法,用于获取实例 public static function getInstance(){ //判断实例有无创建,没有的话创建实例并返回,有的话直接返回 if(!(self::$instance instanceof self)){ self::$instance = new self(); } return self::$instance; } public function setText(string $text){ $this->test_text = $text; } public function getText():string{ return $this->test_text; } } class Test{ public function __construct($text) { Singleton::getInstance()->setText($text); } function printText(){ echo Singleton::getInstance()->getText(); } } $test = new Test(12); echo $test->printText(); exit();
以上代码结果
单例模式的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式包含的角色只有一个,就是单例类——Singleton。单例类拥有一个私有构造函数,私有克隆方法。确保无法通过外部直接实例化/克隆它。另外,单例模式中包含一个静态私有成员变量和静态公有的工厂方法,该工厂方法用于检测实例是否存在并实例化自己。然后存储在静态变量中。以确保只有一个实例被创建。
在实现单例模式的过程中,需要注意以下几点