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