單例模式是指整個應用中類只有乙個物件例項的設計模式。它通常被用來建立物件,確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。
它是一種常見的設計模式,在計算機系統中,執行緒池、快取、日誌物件、對話方塊、印表機、資料庫操作、顯示卡的驅動程式常被設計成單例。
乙個類在整個應用中有且只有乙個例項
類必須自行建立這個例項
必須自行向整個系統提供這個例項
使用單例模式最大的作用就是能減少系統開銷,節約資源。比如我們在使用php進行日常開發中,經常需要多次連線mysql或redis等各種關係型、非關係型資料庫,如果不使用單例模式,則需多次進行new建立新的例項,都會消耗大量的記憶體資源和系統資源。
1、需要乙個儲存類的唯一例項的靜態成員變數
private static $_instance;
2、建構函式和轉殖函式必須宣告為私有,防止外部程式new類從而失去單例模式的意義
// 私有化構造方法,防止new例項
private function __construct()
// 覆蓋__clone()方法,禁止轉殖
private function __clone()
3、必須提供乙個訪問這個例項的公共的靜態方法(通常為getinstance方法),從而返回唯一例項的乙個引用
// 用於返回物件例項的公共靜態方法
public static function getinstance()
// 最終返回例項
return self::$_instance;
}
下面我就以乙個mysql操作類為例給大家演示下它的寫法。
**:
<?php
/** * class db 資料庫操作類
*/class db
// 覆蓋__clone()方法,禁止轉殖
private function __clone()
// 返回物件例項
public static function getinstance()
// 返回物件例項
return self::$_instance;
}// 其他方法
public function adduserinfo(...)
// 其他方法
public function getuserinfo(...)
}// 演示
$db = db::getinstance();
$db->adduserinfo(...);
$db->getuserinfo(...);
講了這麼多單例模式的內容,可不是說它沒有缺點哦,下面我列出了使用單例模式的優缺點,大家看下,可以根據實際需求選擇使用。
單例模式的優缺點:
改進系統的設計
是對全域性變數的一種改進
節省系統資源開銷
難於除錯
隱藏的依賴關係
無法用錯誤型別的資料覆寫乙個單例
PHP設計模式之單例模式
1 單例模式概念 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。2 uml靜態模型 3 單...
PHP設計模式之 單例模式
class danli 建立 clone方法防止物件被複製轉殖 public function clone 單例方法,用於訪問例項的公共的靜態方法 public static function getinstance return self instance public function test...
PHP設計模式之 單例模式
單例模式 職責模式 簡單的說,乙個物件 在學習設計模式之前,需要比較了解物件導向思想 只負責乙個特定的任務 單例類 1 建構函式需要標記為 private 訪問控制 防止外部 使用 new操作符建立物件 單例類不能在其他類中例項化,只能被其自身例項化 2 擁有乙個儲存類的例項的靜態成員變數 3 擁有...