PHP設計模式之單例模式

2021-07-07 08:24:36 字數 1853 閱讀 8373

1、單例模式概念

單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。

2、uml靜態模型

3、單例模式最佳例項

單例模式常用於構建資料庫連線物件。資料庫訪問物件可以負責建立乙個與資料庫的例項化連線。接下來,只要呼叫這個物件的特定方法,該物件就會使用已建立的連線,因為建立與資料庫伺服器的連線開銷很大(需要耗用大量的時間和資源),所以**應盡可能的不去執行這種操作。所以說,單例模式是設計資料庫連線的最好例子。

4、單例模式**

<?php

class dbconnection

return self::$_instance;

}protected function __construct()

public function selectquery($id)";

$link = mysql_query($query,$this->_handle);

$row = mysql_fetch_array($link);

return $row;}}

$time_start = microtime(true)*1000;

//獲取當前毫秒數

$db = dbconnection::getinstance();

for($i = 1;$i<5;$i++) $db->selectquery($i);

$time_end = microtime(true)*1000;

//獲取當前毫秒數

echo $time_end-$time_start;

//win7 i5 4g記憶體 執行大概大約為15ms

5、測試

專門針對這個資料庫連線方面做了乙個簡單的測試,測試**如下:

<?php

/** 不使用單例模式--->測試

*/function selectquery($id)";

$link = mysql_query($query);

$row = mysql_fetch_array($link);

return $row;

}$time_start = microtime(true)*1000;

//獲取當前毫秒數

for($i=1;$i<5;$i++)

$time_end = microtime(true)*1000;

//獲取當前毫秒數

echo "

";echo $time_end-$time_start;/win7 i5 4g記憶體 執行大概大約為30ms

6、結論

大概可以得出結論,如果在乙個頁面中寫了5個模組,並且每個模組都單獨操作mysql資料庫,那麼在資料庫連線方面就耗費了一些多餘的時間。

如果使用單例模式,在這5個模組只使用了乙個連線資料庫的連線,那麼就會減少連線資料庫的開支,5個模組就多了1倍,試想,如果有5個人同時開啟該頁面 那麼將會是多

少倍的開支呢?在該測試時mysql是在本地安裝的,如果是遠端的呢?如果不用單例模式,那麼將會耗費更多的資源。

PHP設計模式之 單例模式

class danli 建立 clone方法防止物件被複製轉殖 public function clone 單例方法,用於訪問例項的公共的靜態方法 public static function getinstance return self instance public function test...

PHP設計模式之 單例模式

單例模式 職責模式 簡單的說,乙個物件 在學習設計模式之前,需要比較了解物件導向思想 只負責乙個特定的任務 單例類 1 建構函式需要標記為 private 訪問控制 防止外部 使用 new操作符建立物件 單例類不能在其他類中例項化,只能被其自身例項化 2 擁有乙個儲存類的例項的靜態成員變數 3 擁有...

PHP設計模式之 單例模式

單例模式 職責模式 簡單的說,乙個物件 在學習設計模式之前,需要比較了解物件導向思想 只負責乙個特定的任務 單例類 1 建構函式需要標記為 private 訪問控制 防止外部 使用 new操作符建立物件 單例類不能在其他類中例項化,只能被其自身例項化 2 擁有乙個儲存類的例項的靜態成員變數 3 擁有...