一、什麼是單例設計模式
單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式時,單例物件的類必須保證只有一個例項存在。
二、單例模式的技巧
- 利用$_instance私有變數來儲存類的唯一例項化物件;
- 設計一個getInstance對外公開的函式,可以獲取類唯一例項;
- 防止使用者用new例項化,和克隆,構造兩個__construct、__clone私有函式;
三、單例模式的應用場景
資料庫設計,我們傳送一次請求,可能會需要訪問不同的表,那麼如果每次訪問都 new 一個例項,那必然會造成資源的浪費,所以使用單例模式,可以很好的節省資源。
單例類
class DataBase
{
/**
* 靜態成品變數,儲存全域性例項
*/
private static $_instance = null;
/**
* 測試變數,儲存日誌資訊
*/
private static $_msg = null;
/**
* 私有構造方法,防止外界例項化物件
*/
private function __construct()
{
$connect = "連線資料庫操作";
}
/**
* 私有化克隆方法,防止外來鍵克隆物件
*/
private function __clone()
{
}
/**
* 靜態方法,外界獲取例項的唯一介面
* @return Object 返回物件唯一例項
*/
public static function getInstance()
{
if (!self::$_instance){
self::$_instance = new DataBase();
self::$_msg = "這是一個新物件" . "<br>";
}else{
self::$_msg = "這個是一箇舊的物件" . "<br>";
}
return self::$_instance;
}
public function log()
{
echo self::$_msg;
}
}
客戶端測試程式碼
$dbA = DataBase::getInstance();
$dbA->log();
$dbB = DataBase::getInstance();
$dbB->log();
$dbC = DataBase::getInstance();
$dbC->log();
輸出結果:
這是一個新物件
這個是一箇舊的物件
這個是一箇舊的物件
“物件”?,程式設計師怎麼可能有物件!~