企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
> **单例模式**,也叫**单子模式**,是一种常用的[软件设计模式](https://zh.wikipedia.org/wiki/%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F)。在应用这个模式时,单例对象的[类](https://zh.wikipedia.org/wiki/%E7%B1%BB)必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局[对象](https://zh.wikipedia.org/wiki/%E5%AF%B9%E8%B1%A1),这样有利于我们协调系统整体的行为。 > > 实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的[构造函数](https://zh.wikipedia.org/wiki/%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0)定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。 > > \---维基百科 单例模式的要点有:某个类只能有一个实例;它必须自行创建本身的实例;它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。 `角色:` Singleton:单例类 `UML 类图:` ![此处输入图片的描述](https://doc.shiyanlou.com/document-uid108299labid2297timestamp1486368498821.png) `示例代码``Singleton.class.php` ~~~php <?php class Singleton { private static $instance; //私有构造方法,禁止使用new创建对象 private function __construct(){} public static function getInstance(){ if (!isset(self::$instance)) { self::$instance = new self; } return self::$instance; } //将克隆方法设为私有,禁止克隆对象 private function __clone(){} public function say() { echo "这是用单例模式创建对象实例 <br>"; } public function operation() { echo "这里可以添加其他方法和操作 <br>"; } } // $shiyanlou = new Singleton(); $shiyanlou = Singleton::getInstance(); $shiyanlou->say(); $shiyanlou->operation(); $newShiyanlou = Singleton::getInstance(); var_dump($shiyanlou === $newShiyanlou); ~~~ * * * 上述的几个模式均属于`创建型模式`,接下来将要介绍的模式属于结构型模式,在本实验后面的文档将介绍三个,剩下来的留在下一个实验继续介绍。