一個國家同一時間只能有一位總統。只要使命召喚,這個總統就必須採起行動。 這裏的總統就是一個單例。編程
確保特定類的對象只被建立一次。設計模式
在軟件工程中,單例模式是一種軟件設計模式,用來限制類初始化爲對象。當偏偏只須要一個對象來協調整個系統的功能時,單例模式很是有用。ide
實際上,單例模式被認爲是反模式,應該避免過分使用。 單例模式並不是很差,可能有時候頗有用,但應謹慎使用,由於它在你的應用程序中引入了全局狀態,一處更改可能會影響其餘地方,而且可能會變得很難調試。 另外很差的一點是單例模式會使代碼緊耦合,單例也很難mock。函數
要建立一個單例,須要將構造函數設爲 private,禁用克隆,禁用擴展名,並建立靜態變量來容納實例spa
final class President設計
{調試
private static $instance;對象
private function __construct()get
{io
// Hide the constructor
}
public static function getInstance(): President
{
if (!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
private function __clone()
{
// Disable cloning
}
private function __wakeup()
{
// Disable unserialize
}
}
$president1 = President::getInstance();
$president2 = President::getInstance();
var_dump($president1 === $president2); // true