定義:
單例模式:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
實現思路:
1、通常我們可以讓一個全局變量使得一個對象被訪問,但它不能防止你實例化多個對象。一個最好的辦法就是,讓類自身負責保存它的唯一實例。這個類可以保證沒有其他實例可以被創建,並且它可以提供一個訪問該實例的方法。
2、首先從強制控制對象實例化開始,創建一個無法從外部進行實例化的類,這聽起來似乎很難,但其實只需要簡單地將構造方法定義爲 private 即可。
3、因爲構造方法是私有的,所以可以用一個靜態方法 $getInstance() 和一個靜態屬性 $instance 來間接地實例化對象。
4、$instance 屬性定義爲靜態私有的,因此我們無法從類的外部訪問它, getInstance() 方法定義爲靜態 public 的,所以腳本中的任何代碼都可以調用它。
代碼實例:
class Single
{
/**
* 定義一個靜態私有的屬性存儲實例化對象
*/
private static $instance;
/**
* Single constructor. 構造方法 private,防止外部 new創建此類實例
*/
private function __construct()
{
}
/**
* 定義一個靜態 public方法,這是獲取本類實例的唯一全局訪問點
*/
public static function getInstance()
{
// 判斷是否存在已有實例,不存在則new一個新實例,確保只有一個實例
if (empty(self::$instance)) {
self::$instance = new Single();
}
return self::$instance;
}
}