今天講單例設計模式,這種設計模式和工廠模式一樣,用的非常非常多,同時單例模式比較容易的一種設計模式。 一、什麼是單例設計模式 單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在。 二、單例模式的技巧 三、單例模式的應用場景 資料庫設計,我們發送一 ...
今天講單例設計模式,這種設計模式和工廠模式一樣,用的非常非常多,同時單例模式比較容易的一種設計模式。
一、什麼是單例設計模式
單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在。
二、單例模式的技巧
- 利用$_instance私有變數來保存類的唯一實例化對象;
- 設計一個getInstance對外公開的函數,可以獲取類唯一實例;
- 防止用戶用new實例化,和克隆,構造兩個__construct、__clone私有函數;
三、單例模式的應用場景
資料庫設計,我們發送一次請求,可能會需要訪問不同的表,那麼如果每次訪問都 new 一個實例,那必然會造成資源的浪費,所以使用單例模式,可以很好的節省資源。
單例類:
/** * Singleton pattern */ 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();
輸出結果:
這是一個新對象
這個是一個舊的對象
這個是一個舊的對象
別到“對象”別說了,程式員怎麼可能有對象!~
如果有什麼講的疑問或者講的不好的地方,歡迎大家留言。