创建型设计模式-单例 Singleton

发布时间 2023-09-06 12:24:07作者: 菜皮日记

简介

全局共用一个对象,好处是对象只实例化一次,减少资源占用

角色

  • 单例类

    返回本类的唯一一个实例

代码

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多平台发布