您好,登錄后才能下訂單哦!
這篇文章主要介紹使用單例模式來封裝數(shù)據(jù)庫的案例,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
單例模式(Singleton pattern)是一種常用的軟件設(shè)計(jì)模式。在它的核心結(jié)構(gòu)中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統(tǒng)中一個類只有一個實(shí)例而且該實(shí)例易于外界訪問,從而方便對實(shí)例個數(shù)的控制并節(jié)約系統(tǒng)資源。如果希望在系統(tǒng)中某個類的對象只能存在一個,單例模式是最好的解決方案。
如何保證一個類只有一個實(shí)例并且這個實(shí)例易于被訪問呢?定義一個全局變量可以確保對象隨時都可以被訪問,但不能防止我們實(shí)例化多個對象。一個更好的解決辦法是讓類自身負(fù)責(zé)保存它的唯一實(shí)例。這個類可以保證沒有其他實(shí)例被創(chuàng)建,并且它可以提供一個訪問該實(shí)例的方法。這就是單例模式的模式動機(jī)。
例如我們在php的開發(fā)過程中我們創(chuàng)建了一個db類(數(shù)據(jù)庫操作類),那么我們希望再一個php文件中一個數(shù)據(jù)庫只被連接一次而一個php文件中也只需要一個數(shù)據(jù)庫對象!因?yàn)槎啻芜B接數(shù)據(jù)庫會大大降低php的執(zhí)行效率。也會帶來極大的系統(tǒng)開銷!
使用單例模式來封裝你的數(shù)據(jù)庫吧
<?php class db { //使用一個靜態(tài)變量記錄db對象初始化時為null public static $db = null; /* 私有構(gòu)造函數(shù)是類無法完成外部的調(diào)用 * 意味著您將無法使用 $xx = new db(); */ private function __construct(){ echo '連接數(shù)據(jù)庫....'; } /* * 使用靜態(tài)方法去獲取數(shù)據(jù)對象 * 獲取時先判斷db對象是否已經(jīng)存在,如果存在則直接返回db對象反正則創(chuàng)建這個對象 */ public static function getInstance(){ if(self::$db == null){ self::$db = new db(); } return self::$db; } public function query($sql){ echo '執(zhí)行sql命令'; } public function __destruct(){ echo '關(guān)閉數(shù)據(jù)庫連接....'; } } $db = db::getInstance(); $db1 = db::getInstance(); $db->query('test'); $db2 = db::getInstance(); //輸出 : 連接數(shù)據(jù)庫....執(zhí)行sql命令關(guān)閉數(shù)據(jù)庫連接....
//可以看到不論我們獲取多少次db對象,雖然他們名稱不同,但都代表著同一個對象!這樣就實(shí)現(xiàn)單例模式!
以上是使用單例模式來封裝數(shù)據(jù)庫的案例的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。