單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例。即一個類只有一個對象實例。 提示: 資料庫連接池的設計一般也是採用單例模式,因為資料庫連接是一種資料庫資源。資料庫軟體系統中使用資料庫連接池,主要是節省打開或者關閉資料庫連 ...
單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例。即一個類只有一個對象實例。
提示: 資料庫連接池的設計一般也是採用單例模式,因為資料庫連接是一種資料庫資源。資料庫軟體系統中使用資料庫連接池,主要是節省打開或者關閉資料庫連接所引起的效率損耗,這種效率上的損耗還是非常昂貴的,因此用單例模式來維護,就可以大大降低這種損耗。
PHP實現單例模式有四個要點:
- 需要一個保存類的唯一實例的靜態成員變數;
- 構造函數和克隆函數必須聲明為私有的防止外部程式new類而失去單例模式的意義;
- 必須提供一個訪問這個實例的公共的靜態方法
- 在定義類的時候用final關鍵字禁止繼承,防止重寫父類方法。
參考代碼:
final class Singleton {
//靜態變數要設置為私有,防止被修改
private static $instance;
//構造函數聲明為私有,防止外部程式new類
private function __construct() {
}
//克隆函數聲明為私有,防止克隆對象
private function __clone() {
}
//提供一個創建唯一實例的介面
public static function getInstance() {
if(!(self::$instance instanceof self)) {
self::$instance = new self();
}
return self::$instance;
}
}
//只能根據getInstance靜態方法創建Singleton實例
$ins = Singleton::getInstance();