摘要:單例設(shè)計模式的特點在用戶量大的應(yīng)用中會存在大量的數(shù)據(jù)庫操作使用單例模式則可以避免大量的操作消耗的資源。使用單例設(shè)計模式,可以全局控制某些配置信息,方便調(diào)試,單例設(shè)計模式只有一個入口,所有的代碼都集中在一個類中,定位問題簡單。
單例設(shè)計模式的特點:
1、在用戶量大的應(yīng)用中會存在大量的數(shù)據(jù)庫操作, 使用單例模式, 則可以避免大量的new 操作消耗的資源。
2、使用單例設(shè)計模式,可以全局控制某些配置信息,方便調(diào)試,單例設(shè)計模式只有一個入口,所有的代碼都集中在一個類中,定位問題簡單。
單例模式的特點:
1、一個類只能有一個類對象(只能實例化一個對象)
2、它必須自己創(chuàng)建這個實例
3、它必須自行向整個系統(tǒng)提供這個實例
4、構(gòu)造函數(shù)和克隆函數(shù)必須聲明為私有的,這是為了防止外部程序 new 類從而失去單例模式的意義
5、 getInstance()方法必須聲明為公有的,必須調(diào)用此方法以返回唯一實例的一個引用
6、擁有一個保存類的實例的靜態(tài)成員變量
7、PHP的單例模式是相對而言的,因為PHP的解釋運行機制使得每個PHP頁面被解釋執(zhí)行后,所有的相關(guān)資源都會被回收
8、擁有一個訪問這個實例的公共的靜態(tài)方法(常用getInstance()方法進行實例化單例類,通過instanceof操作符可以檢測到類是否已經(jīng)被實例化)
另外,需要創(chuàng)建__clone()方法防止對象被復(fù)制(克?。?/p>
class Redis { /** * 實例化的對象,單例模式. * @var iphpdbRedis */ static private $_instance= array(); private function __construct($config,$attr=array()) { if ( !extension_loaded("redis") ) { E(L("_NOT_SUPPORT_").":redis"); } $this->attr = array_merge($this->attr,$attr); $this->port = $config["REDIS_PORT"] ? $config["REDIS_PORT"] : 6379; $this->host = $config["DB_HOST"]; $this->redis = new Redis(); $this->redis->connect($this->host, $this->port, $this->attr["timeout"]); if($config["auth"]) { $this->auth($config["auth"]); $this->auth = $config["auth"]; } $this->expireTime = time() + $this->attr["timeout"]; } /** * 得到靜態(tài)實例化的對象. * 為每個數(shù)據(jù)庫建立一個連接 * 如果連接超時,將會重新建立一個連接 */ public static function getInstance($config,$attr=array()) { if(!self::$_instance || !(self::$_instance instanceof self)){ self::$_instance = new self($config,$attr=array()); } return self::$_instance; } // 靜止被克隆 private function __clone(){} }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30086.html
摘要:總結(jié)單例是運用頻率很高的模式,因為客戶端沒有高并發(fā)的情況,選擇哪種方式并不會有太大的影響,出于效率考慮,推薦使用和靜態(tài)內(nèi)部類實現(xiàn)單例模式。 單例模式介紹 單例模式是應(yīng)用最廣的模式之一,也可能是很多人唯一會使用的設(shè)計模式。在應(yīng)用單例模式時,單例對象的類必須保證只用一個實例存在。許多時候整個系統(tǒng)只需要一個全局對象,這樣有利于我么能協(xié)調(diào)整個系統(tǒng)整體的行為。 單例模式的使用場景 確保某個類有且...
摘要:不符合設(shè)計模式中的單一職責(zé)的概念。引入代理實現(xiàn)單例模式引入代理實現(xiàn)單例模式的特點我們負責(zé)管理單例的邏輯移到了代理類中。的單例模式對比在以上的代碼中實現(xiàn)的單例模式都混入了傳統(tǒng)面向?qū)ο笳Z言的特點。 聲明:這個系列為閱讀《JavaScript設(shè)計模式與開發(fā)實踐》 ----曾探@著一書的讀書筆記 1.單例模式的特點和定義 保證一個類僅有一個實例,并且提供一個訪問它的全局訪問點。 2.傳統(tǒng)面向?qū)?..
摘要:單例模式概述單例模式是一種對象創(chuàng)建模式,用于產(chǎn)生一個類的具體事例。所以解決了線程安全問題參考失效原因和解決方案中單例模式的缺陷及單例的正確寫法懶漢式靜態(tài)內(nèi)部類私有構(gòu)造器獲取單例的方法靜態(tài)內(nèi)部類持有單例作為靜態(tài)屬性。 單例模式概述 單例模式是一種對象創(chuàng)建模式,用于產(chǎn)生一個類的具體事例。使用單例模式可以確保整個系統(tǒng)中單例類只產(chǎn)生一個實例。有下面兩大好處: 對于頻繁創(chuàng)建的對象,節(jié)省初第一...
摘要:如果需要防范這種攻擊,請修改構(gòu)造函數(shù),使其在被要求創(chuàng)建第二個實例時拋出異常。單例模式與單一職責(zé)原則有沖突。源碼地址參考文獻設(shè)計模式之禪 定義 單例模式是一個比較簡單的模式,其定義如下: 保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 或者 Ensure a class has only one instance, and provide a global point of ac...
閱讀 3608·2020-12-03 17:42
閱讀 2779·2019-08-30 15:54
閱讀 2233·2019-08-30 15:44
閱讀 579·2019-08-30 14:08
閱讀 980·2019-08-30 14:00
閱讀 1117·2019-08-30 13:46
閱讀 2797·2019-08-29 18:33
閱讀 2939·2019-08-29 14:11