注:单例模式可能被认为是一种“反模式”。为了获得更好的可测试性和可维护性,建议使用依赖注入。
让应用只存在一个对象的实例,处理所有的调用。
Singleton.php
<?php
declare(strict_types=1);
namespace DesignPatternsCreationalSingleton;
use Exception;
final class Singleton
{
private static ?Singleton $instance = null;
public static function getInstance(): Singleton
{
if (static::$instance === null) {
static::$instance = new static();
}
return static::$instance;
}
private function __construct()
{
}
private function __clone()
{
}
public function __wakeup()
{
throw new Exception("Cannot unserialize singleton");
}
}
Tests/SingletonTest.php
<?php declare(strict_types=1); namespace DesignPatternsCreationalSingletonTests; use DesignPatternsCreationalSingletonSingleton; use PHPUnitFrameworkTestCase; class SingletonTest extends TestCase { public function testUniqueness() { $firstCall = Singleton::getInstance(); $secondCall = Singleton::getInstance(); $this->assertInstanceOf(Singleton::class, $firstCall); $this->assertSame($firstCall, $secondCall); } }
功能测试是软件测试的一个分支,旨在验证软件应用程序的功能,而不管功能是否根据需求规范运行。通过给出适当的输入值,确定输出...
前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处...
OceanBase Connector/J 结果集通过使用客户端缓存来支持可滚动性,并通过使用ROWID支持可更新性。可滚动性由于基础服务器不...