在php編程中,單例模式雖然不是最常用,但一定是最不可缺少、應(yīng)用非常廣泛的一種設(shè)計(jì)模式,雖然你可能不太了解它,但只要你有過開發(fā)一個(gè)完成系統(tǒng)的經(jīng)歷,相信我,你一定使用過它。
單例模式(Singleton Pattern),也被成為單件模式,確保某個(gè)類只能有一個(gè)正在運(yùn)行的實(shí)例,而且自行實(shí)例化并且向系統(tǒng)提供這個(gè)實(shí)例。有且只有一個(gè) 是單例模式最重要的特點(diǎn)。
1.只能有一個(gè)實(shí)例。
2.必須自行創(chuàng)建這個(gè)實(shí)例。
3.必須給其他對象提供這一實(shí)例。
比如在應(yīng)用中需要一個(gè)日志記錄對象,并且需要在整個(gè)系統(tǒng)中只使用這一個(gè)對象,這時(shí)候就需要單例模式。另外一個(gè)應(yīng)用中會存在大量的數(shù)據(jù)庫操作,針對數(shù)據(jù)庫句柄連接數(shù)據(jù)庫的行為,使用單例模式可以避免大量的new操作。因?yàn)槊恳淮蝞ew操作都會消耗系統(tǒng)和內(nèi)存的資源。
實(shí)現(xiàn)一個(gè)靜態(tài)的類方法getInstance(),這個(gè)方法只返回該類的唯一實(shí)例,當(dāng)?shù)谝淮握{(diào)用這個(gè)方法的時(shí)候,它創(chuàng)建一個(gè)實(shí)例,吧它存在一個(gè)私有的靜態(tài)變量之中,并且返回該實(shí)例,下一次,他只返回已經(jīng)創(chuàng)建的實(shí)例。
一個(gè)日志記錄類。
<?php/*** 日志記錄類*/class Logger{ //私有化靜態(tài)變量 static PRivate $instance = NULL; // 私有構(gòu)造函數(shù),防止實(shí)例化對象 private function __construct() { # code... } // 私有克隆函數(shù) private function __clone(){ } // 靜態(tài)方法,統(tǒng)一訪問入口 static public function getInstance(){ if(self::$instance == NULL){ self::$instance = new Logger(); } return self::$instance; } static function Log($str) { }}?>一般要使一個(gè)程序中只有一個(gè)實(shí)例時(shí),會使用全局變量,但不同于面向過程,面向?qū)ο蟮某绦蛟O(shè)計(jì)中應(yīng)當(dāng)盡量避免全局變量的出現(xiàn),所以使用單例模式是一個(gè)很好的選擇。
新聞熱點(diǎn)
疑難解答