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