設計模式?聽起來很高大上?的確是這樣的。設計模式就是組織**的方式,也就是說**不再是一條條的往下執行,按照前人總結的行之有效的方法,更有效的來組織**,這樣效率更高,而且看起來也清晰有序。
php單例模式,起初不是很熟悉,是在看mvc框架源**的時候才注意到的,設計模式在框架的設計應用中很廣泛,因此框架的**更有序高效。
單例模式顧名思義,就是只有乙個例項。作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類我們稱為單例類。
單例模式有三個特點:
1.某個類只能有乙個例項。
2.這個類必須自己建立這個例項。
3.這個類必須自行向系統提供這個例項。
為什么使用"單例模式"?
先看一段**:(這是乙個資料庫連線類)
<?phpview codeclass
mysql
else
} } ?>
每次資料庫連線都要new這個類,然後呼叫mysqlconnect方法,返回連線,然後close掉連線,頻繁的new和資料庫連線關閉操作非常的消耗資源!資料庫軟體系統中使用資料庫連線池,主要是節省開啟或者關閉資料庫連線所引起的效率損耗,這種效率上的損耗還是非常昂貴的,因為何用單例模式來維護,就可以大大降低這種損耗。
因此,為了避免資源消耗,我們有了下面的改進:
<?phpview codeclass
mysql
//建立乙個用來例項化物件的方法
public
static
function
getinstance()
return self::$conn
; }
//防止物件被複製
public
function
__clone()
}//只能這樣取得例項,不能new 和 clone
$mysql = mysql::getinstance();
?>
這樣就不用每次都來new這個類了,方便了很多。下面給乙個詳細的:
<?phpview codeclass
mysql
private
function
__clone(){}
public
static
function getinstance($host, $username, $password
)
return self::$_instance
; }
//連線資料表
public
function select_db($database
)
//執行sql語句
public
function query($query
)
//將結果集儲存為陣列
public
function fetch_array($fetch_array
)
//獲得記錄數目
public
function num_rows($query
)
//關閉資料庫連線
public
function
close()
}?>
使用的時候:
$con = mysql::getinstance($host, $username, $password);
$con -> select_db($database);
當然,單例模式不僅僅只是應用在資料庫的操作類上面。還可以應用在這些方面:
1. **的計數器,一般也是採用單例模式實現,否則難以同步。
2. 應用程式的日誌應用,一般都何用單例模式實現,這一般是由於共享的日誌檔案一直處於開啟狀態,因為只能有乙個例項去操作,否則內容不好追加。
3. web應用的配置物件的讀取,一般也應用單例模式,這個是由於配置檔案是共享的資源。
原出處
實現單例模式及應用場景
單例模式面試經常被問 什麼情況下需要單例模式 1.每個例項都會占用資源,而且每個例項初始化都會影響效能 2.當有同步需求的時候,如日誌檔案的控制,確保只有乙個例項。上 使用裝飾器實現單例模式 def singleton cls instance def getinstance if cls not ...
單例模式應用場景
了解單例模式 單例模式實際應用場景。1.windows的task manager 任務管理器 就是很典型的單例模式 這個很熟悉吧 想想看,是不是呢,你能開啟兩個windows task manager嗎?2.windows的recycle bin 站 也是典型的單例應用。在整個系統執行過程中,站一直...
單例模式應用場景及實現(By C )
單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例類的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。單例模式要點 單例模式的要點有三個 一是某...