瞭解
單例設計模式用於限制特定物件只能被例項化建立一次,有且只有一個此型別的資源。例如,通過資料庫控制程式碼到資料庫的連線是獨佔的。您希望在應用程式中共享資料庫控制程式碼,因為在保持連線開啟或關閉時,它是一種開銷,在獲取單個頁面的過程中更是如此。單例模式可以減少類的例項化,避免大量的new操作。因為每一次new操作都會消耗系統和記憶體的資源。
特點
- 只能有一個例項。
- 必須自行建立這個例項。
- 必須給其他物件提供這一例項。
程式碼
<?php
//典型的Mysql操作類
class mysql_db{
//1.私有的靜態屬性
private static $dbcon = false;
//2.私有的構造方法
private function __construct(){
$dbconn = @mysql_connect("localhost","root","");
mysql_select_db("test",$dbconn) or die("mysql_connect error");
mysql_query("SET NAMES utf8");
}
//3.私有的克隆方法
private function __clone() {
}
//1.公有的靜態方法
public static function getIntance() {
if(self::$dbcon==false){
self::$dbcon=new self;
}
return self::$dbcon;
}
}
$db = mysql_db::getIntance();
補充說明
- $_instance必須宣告為靜態的私有變數
- 建構函式和解構函式必須宣告為私有,防止外部程式new 類從而失去單例模式的意義
- getInstance()方法必須設定為公有的,必須呼叫此方法 以返回例項的一個引用
- ::操作符只能訪問靜態變數和靜態函式
- new物件都會消耗記憶體
- 使用場景:最常用的地方是資料庫連線。
- 使用單例模式生成一個物件後, 該物件可以被其它眾多物件所使用。
- 私有的__clone()方法防止克隆物件