PHP 设计模式 - 创建型 - 单例模式(Singleton)

1. 模式定义

单例设计模式(Singleton Design Pattern):一个类只允许创建一个对象(或者实例),那这个类就是单例类,这种设计模式就叫做单例设计模式,简称单例模式。
在整个应用程序的生命周期中,任何时刻,单例类仅存在一个实例,同时这个类还必须提供一个访问该类的全局访问点。 常见使用实例:数据库连接器;日志记录器(如果有多种用途使用多例模式);锁定文件。

2. UML类图

image.png

instance 翻译为实例

3. 示例代码

下面是项目开发中用到的一个存储当前用户信息的一个单例例子。需要注意是由于PHP是单线程,所以用户信息使用单例模式时,不会存在安全问题(问题指:多个用户登陆使用的是第一个实例化的用户信息),多注意单例的使用场景。
其UML类图如下:


image.png

具体代码如下:

单元测试

 'Sylvia', 'sex' => '女']);
        $firstUserInfo = $firstCall::getUserInfo();
        $this->assertInstanceOf(CurrentUser::class, $firstCall);
        $secondCall = CurrentUser::getInstance('token2', ['name' => 'Tom', 'sex' => '男']);
        $secondUserInfo = $secondCall::getUserInfo();
        $this->assertSame($firstCall, $secondCall);
        $this->assertSame($firstUserInfo, $secondUserInfo);
    }

    /**
     * @throws \ReflectionException
     */
    public function testNoConstructor()
    {
        $obj = CurrentUser::getInstance('token1', ['name' => 'Sylvia', 'sex' => '女']);

        $refl = new \ReflectionObject($obj);
        $meth = $refl->getMethod('__construct');
        $this->assertTrue($meth->isPrivate());
    }
}

此文章为学习笔记,学习文档如下:
学院君 : https://laravelacademy.org/post/2599
极客时间 : 设计模式之美
教程源码:https://github.com/SylviaYuan1995/DesignPatternDemo

你可能感兴趣的:(PHP 设计模式 - 创建型 - 单例模式(Singleton))