摘要:代碼實(shí)現(xiàn)單例模式靜態(tài)變量保存全局實(shí)例私有構(gòu)造函數(shù),防止外界實(shí)例化對象私有克隆函數(shù),防止外界克隆對象靜態(tài)方法,單例統(tǒng)一訪問路口單例模式的優(yōu)缺點(diǎn)優(yōu)點(diǎn)改進(jìn)系統(tǒng)的設(shè)計(jì)是對全局變量的一種改進(jìn)缺點(diǎn)難于調(diào)試隱藏的依賴關(guān)系無法用錯誤類型的數(shù)據(jù)覆寫一個單例
單例模式(Singleton Pattern 單件模式或單元素模式)
單例模式有以下3個特點(diǎn):
1、一個類只能有一個類對象(只能實(shí)例化一個對象)
2、它必須自己創(chuàng)建這個實(shí)例
3、它必須自行實(shí)例化并向整個系統(tǒng)提供這個實(shí)例
4、構(gòu)造函數(shù),克隆函數(shù)必須聲明為私有的,必須提供一個訪問這個實(shí)例的公共靜態(tài)方法(通常命名為getInstance),從而返回唯一實(shí)例的一個引用
采用單例模式的原因:
php語言是一種解釋型的腳本語言,這種運(yùn)行機(jī)制使得每個PHP頁面被解釋執(zhí)行后,所有的相關(guān)資源都會被回收。也就是說,PHP在語言級別上沒辦法使得某個對象常駐內(nèi)存,這和編譯型語言不同,比如在java中單例會一直存在整個應(yīng)用程序的生命周期里,變量是跨頁面的,真正做到這個實(shí)力在應(yīng)用程序生命周期的唯一性。然而在PHP中,所有的變量無論是全局變量還是類的靜態(tài)成員,都是頁面級的,每次頁面被執(zhí)行時,都會重新建立新的對象,都會在頁面執(zhí)行完畢后被清空,這樣的PHP單例模式就沒有什么意義,所以PHP單例模式我覺得只是針對單次頁面級請求時粗線多個應(yīng)用場景并需要共享同一對象資源時是非常有意義的。
上面的對象圖中,有一個"單例對象",而"客戶甲","客戶乙"和"客戶丙"是單例對象的三個客戶對象??梢钥吹剑械目蛻魧ο蠊蚕硪粋€單例對象。而且從單例對象到自身的連接線可以看出,單例對象持有對自己的引用。
php代碼實(shí)現(xiàn)單例模式:
class User {
//靜態(tài)變量保存全局實(shí)例 private static $_instance=null; //私有構(gòu)造函數(shù),防止外界實(shí)例化對象 private function __construct(...){ $this->_db = pg_connect(...);//postgrsql } //私有克隆函數(shù),防止外界克隆對象 private function __clone() { }; //靜態(tài)方法,單例統(tǒng)一訪問路口 public static function getInstance(){ if(! (self::$_instance instanceof self) ) { self::$_instance = new self(); } return self::$_instance; }
?>
單例模式的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
1、改進(jìn)系統(tǒng)的設(shè)計(jì)
2、是對全局變量的一種改進(jìn)
缺點(diǎn):
1、難于調(diào)試
2、隱藏的依賴關(guān)系
3、無法用錯誤類型的數(shù)據(jù)覆寫一個單例
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70345.html
摘要:代碼實(shí)現(xiàn)單例模式靜態(tài)變量保存全局實(shí)例私有構(gòu)造函數(shù),防止外界實(shí)例化對象私有克隆函數(shù),防止外界克隆對象靜態(tài)方法,單例統(tǒng)一訪問路口單例模式的優(yōu)缺點(diǎn)優(yōu)點(diǎn)改進(jìn)系統(tǒng)的設(shè)計(jì)是對全局變量的一種改進(jìn)缺點(diǎn)難于調(diào)試隱藏的依賴關(guān)系無法用錯誤類型的數(shù)據(jù)覆寫一個單例 單例模式(Singleton Pattern 單件模式或單元素模式)單例模式有以下3個特點(diǎn):1、一個類只能有一個類對象(只能實(shí)例化一個對象)2、它必...
摘要:代碼實(shí)現(xiàn)單例模式靜態(tài)變量保存全局實(shí)例私有構(gòu)造函數(shù),防止外界實(shí)例化對象私有克隆函數(shù),防止外界克隆對象靜態(tài)方法,單例統(tǒng)一訪問路口單例模式的優(yōu)缺點(diǎn)優(yōu)點(diǎn)改進(jìn)系統(tǒng)的設(shè)計(jì)是對全局變量的一種改進(jìn)缺點(diǎn)難于調(diào)試隱藏的依賴關(guān)系無法用錯誤類型的數(shù)據(jù)覆寫一個單例 單例模式(Singleton Pattern 單件模式或單元素模式)單例模式有以下3個特點(diǎn):1、一個類只能有一個類對象(只能實(shí)例化一個對象)2、它必...
摘要:很多接觸的框架就是基于各種模式設(shè)計(jì)形成的。在所有模式設(shè)計(jì)中,有三種基礎(chǔ)設(shè)計(jì)模式,單例模式,工廠模式,注冊樹模式,其他模式往往基于這幾種模式,今天帶來的是單例模式。工廠模式更多考慮的是擴(kuò)展維護(hù)的問題。 (非原創(chuàng)) 一.單例模式 模式設(shè)計(jì)是什么?初學(xué)者一開始會被這高大上的名稱給唬住。而對于有豐富編程經(jīng)驗(yàn)的老鳥來說,模式設(shè)計(jì)又是無處不在。很多接觸的框架就是基于各種模式設(shè)計(jì)形成的。 簡單說,在...
摘要:單例模式顧名思義,就是只有一個實(shí)例。為什么要使用單例模式語言本身的局限性語言是一種解釋型的腳本語言,這種運(yùn)行機(jī)制使得每個頁面被解釋執(zhí)行后,所有的相關(guān)資源都會被回收。 單例模式(Singleton Pattern):顧名思義,就是只有一個實(shí)例。作為對象的創(chuàng)建模式,單例模式確保某一個類只有一個實(shí)例,而且自行實(shí)例化并向整個系統(tǒng)提供這個實(shí)例。 為什么要使用單例模式 1、PHP語言本身的局限性P...
閱讀 3464·2021-11-22 09:34
閱讀 1925·2019-08-30 12:53
閱讀 3522·2019-08-28 18:07
閱讀 3010·2019-08-27 10:55
閱讀 2994·2019-08-26 10:12
閱讀 3627·2019-08-23 18:21
閱讀 1370·2019-08-23 14:10
閱讀 1512·2019-08-23 13:04