(轉(zhuǎn))PHP設(shè)計模式(一)—單例模式(Singleton Pattern)

轉(zhuǎn)自http://www.cnblogs.com/fangle/p/6830899.html


單例模式(Singleton Pattern):顧名思義,就是只有一個實例甚脉。作為對象的創(chuàng)建模式爬迟,單例模式確保某一個類只有一個實例芋忿,而且自行實例化并向整個系統(tǒng)提供這個實例吭净。

(一)為什么要使用PHP單例模式

1,php的應(yīng)用主要在于數(shù)據(jù)庫應(yīng)用, 一個應(yīng)用中會存在大量的數(shù)據(jù)庫操作, 在使用面向?qū)ο蟮姆绞介_發(fā)時, 如果使用單例模式,

則可以避免大量的new 操作消耗的資源,還可以減少數(shù)據(jù)庫連接這樣就不容易出現(xiàn) too many connections情況岩遗。

2吩坝,如果系統(tǒng)中需要有一個類來全局控制某些配置信息, 那么使用單例模式可以很方便的實現(xiàn). 這個可以參看zend Framework的FrontController部分。

3缠诅,在一次頁面請求中, 便于進行調(diào)試, 因為所有的代碼(例如數(shù)據(jù)庫操作類db)都集中在一個類中, 我們可以在類中設(shè)置鉤子, 輸出日志溶浴,從而避免到處var_dump, echo

(二)單例模式UML圖

Singleton Pattern

(三)單例模式的實現(xiàn)

1,私有化一個屬性用于存放唯一的一個實例

2管引,私有化構(gòu)造方法士败,私有化克隆方法,用來創(chuàng)建并只允許創(chuàng)建一個實例

3褥伴,公有化靜態(tài)方法谅将,用于向系統(tǒng)提供這個實例

(四)代碼實現(xiàn)

class Singleton

{

? ? ? ? ? ? ?//存放實例

? ? ? ? ? ? ? privatestatic$_instance=null;

? ? ? ? ? ? ?//私有化構(gòu)造方法、

? ? ? ? ? ? ?privatefunction__construct(){

? ? ? ? ? ? ? ?echo"單例模式的實例被構(gòu)造了";

} ? ? ? ? ??

? ? ? ? //私有化克隆方法privatefunction__clone(){

}//公有化獲取實例方法publicstaticfunctiongetInstance(){if(!(self::$_instanceinstanceof Singleton)){

self::$_instance=newSingleton();

}returnself::$_instance;

}

}$singleton=Singleton::getInstance();

優(yōu)點:因為靜態(tài)方法可以在全局范圍內(nèi)被訪問重慢,當(dāng)我們需要一個單例模式的對象時饥臂,只需調(diào)用getInstance方法,獲取先前實例化的對象似踱,無需重新實例化隅熙。

(五)使用Trait關(guān)鍵字實現(xiàn)類似于繼承單例類的功能

Trait Singleton{//存放實例privatestatic$_instance=null;//私有化克隆方法privatefunction__clone(){

}//公有化獲取實例方法publicstaticfunctiongetInstance(){$class=__CLASS__;if(!(self::$_instanceinstanceof$class)){

self::$_instance=new$class();

}returnself::$_instance;

}

}classDB {privatefunction__construct(){echo__CLASS__.PHP_EOL;

}

}classDBhandleextendsDB {useSingleton;privatefunction__construct(){echo"單例模式的實例被構(gòu)造了";

}

}$handle=DBhandle::getInstance();//注意若父類方法為public,則子類只能為pubic核芽,若父類為private囚戚,子類為public ,protected轧简,private都可以驰坊。

補充,大多數(shù)書籍介紹單例模式哮独,都會講三私一公拳芙,公優(yōu)化靜態(tài)方法作為提供對象的接口假勿,私有屬性用于存放唯一一個單例對象。私有化構(gòu)造方法态鳖,私有化克隆方法保證只存在一個單例转培。

但實際上,雖然我們無法通過new 關(guān)鍵字和clone出一個新的對象浆竭,但我們?nèi)粝氲玫揭粋€新對象浸须。還是有辦法的,那就是通過序列化和反序列化得到一個對象邦泄。私有化sleep()和wakeup()方法依然無法阻止通過這種方法得到一個新對象删窒。或許真得要阻止顺囊,你只能去__wakeup添加刪除一個實例的代碼肌索,保證反序列化增加一個對象,你就刪除一個特碳。不過這樣貌似有點怪異诚亚。

后續(xù)更新,歡迎大家評論指正

歡迎大家關(guān)注我的微信公眾號 火風(fēng)鼎

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末午乓,一起剝皮案震驚了整個濱河市站宗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌益愈,老刑警劉巖梢灭,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蒸其,居然都是意外死亡敏释,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門摸袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钥顽,“玉大人,你說我怎么就攤上這事但惶《欤” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵膀曾,是天一觀的道長县爬。 經(jīng)常有香客問我,道長添谊,這世上最難降的妖魔是什么财喳? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上耳高,老公的妹妹穿的比我還像新娘扎瓶。我一直安慰自己,他們只是感情好泌枪,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布概荷。 她就那樣靜靜地躺著,像睡著了一般碌燕。 火紅的嫁衣襯著肌膚如雪误证。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天修壕,我揣著相機與錄音愈捅,去河邊找鬼。 笑死慈鸠,一個胖子當(dāng)著我的面吹牛蓝谨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播青团,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼譬巫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了壶冒?” 一聲冷哼從身側(cè)響起缕题,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胖腾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘪松,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡咸作,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宵睦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片记罚。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖壳嚎,靈堂內(nèi)的尸體忽然破棺而出桐智,到底是詐尸還是另有隱情,我是刑警寧澤烟馅,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布说庭,位于F島的核電站,受9級特大地震影響郑趁,放射性物質(zhì)發(fā)生泄漏刊驴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捆憎。 院中可真熱鬧舅柜,春花似錦、人聲如沸躲惰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽础拨。三九已至氮块,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間太伊,已是汗流浹背雇锡。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留僚焦,地道東北人锰提。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像芳悲,于是被迫代替她去往敵國和親立肘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容