乐趣区

关于后端:创建型设计模式单例-Singleton

简介

全局共用一个对象,益处是对象只实例化一次,缩小资源占用

角色

  • 单例类

    返回本类的惟一一个实例

代码

class Singleton
{private static $instances = [];

    protected function __construct() {}

    protected function __clone() {}

    public function __wakeup()
    {throw new \Exception("Cannot unserialize a singleton.");
    }

    public static function getInstance(): Singleton
    {
        $cls = static::class;
        if (!isset(self::$instances[$cls])) {self::$instances[$cls] = new static();}

        return self::$instances[$cls];
    }

    public function someBusinessLogic()
    {// ...}
}

function clientCode()
{$s1 = Singleton::getInstance();
    $s2 = Singleton::getInstance();
    if ($s1 === $s2) {echo "Singleton works, both variables contain the same instance.";} else {echo "Singleton failed, variables contain different instances.";}
}

clientCode();

output:

Singleton works, both variables contain the same instance.

本文由 mdnice 多平台公布

退出移动版