国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP面向?qū)ο缶幊淘O(shè)計(jì)模式(二)單例模式

2019-11-06 07:11:00
字體:
供稿:網(wǎng)友

  在php編程中,單例模式雖然不是最常用,但一定是最不可缺少、應(yīng)用非常廣泛的一種設(shè)計(jì)模式,雖然你可能不太了解它,但只要你有過開發(fā)一個(gè)完成系統(tǒng)的經(jīng)歷,相信我,你一定使用過它。

介紹

單例模式(Singleton Pattern),也被成為單件模式,確保某個(gè)類只能有一個(gè)正在運(yùn)行的實(shí)例,而且自行實(shí)例化并且向系統(tǒng)提供這個(gè)實(shí)例。有且只有一個(gè) 是單例模式最重要的特點(diǎn)。

特點(diǎn)

1.只能有一個(gè)實(shí)例。

2.必須自行創(chuàng)建這個(gè)實(shí)例。

3.必須給其他對象提供這一實(shí)例。

場景

比如在應(yīng)用中需要一個(gè)日志記錄對象,并且需要在整個(gè)系統(tǒng)中只使用這一個(gè)對象,這時(shí)候就需要單例模式。另外一個(gè)應(yīng)用中會存在大量的數(shù)據(jù)庫操作,針對數(shù)據(jù)庫句柄連接數(shù)據(jù)庫的行為,使用單例模式可以避免大量的new操作。因?yàn)槊恳淮蝞ew操作都會消耗系統(tǒng)和內(nèi)存的資源。

實(shí)現(xiàn)方式

  實(shí)現(xiàn)一個(gè)靜態(tài)的類方法getInstance(),這個(gè)方法只返回該類的唯一實(shí)例,當(dāng)?shù)谝淮握{(diào)用這個(gè)方法的時(shí)候,它創(chuàng)建一個(gè)實(shí)例,吧它存在一個(gè)私有的靜態(tài)變量之中,并且返回該實(shí)例,下一次,他只返回已經(jīng)創(chuàng)建的實(shí)例。

例子

一個(gè)日志記錄類。

<?php/*** 日志記錄類*/class Logger{ //私有化靜態(tài)變量 static PRivate $instance = NULL; // 私有構(gòu)造函數(shù),防止實(shí)例化對象 private function __construct() { # code... } // 私有克隆函數(shù) private function __clone(){ } // 靜態(tài)方法,統(tǒng)一訪問入口 static public function getInstance(){ if(self::$instance == NULL){ self::$instance = new Logger(); } return self::$instance; } static function Log($str) { }}?>

   一般要使一個(gè)程序中只有一個(gè)實(shí)例時(shí),會使用全局變量,但不同于面向過程,面向?qū)ο蟮某绦蛟O(shè)計(jì)中應(yīng)當(dāng)盡量避免全局變量的出現(xiàn),所以使用單例模式是一個(gè)很好的選擇。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 翁源县| 奉新县| 余江县| 六安市| 屏山县| 蒙城县| 赤峰市| 仪征市| 孝感市| 邛崃市| 台东市| 濮阳市| 隆子县| 布拖县| 彝良县| 临海市| 朝阳市| 西畴县| 阿荣旗| 苍山县| 白沙| 济宁市| 竹溪县| 华阴市| 温州市| 滨州市| 赤水市| 锡林浩特市| 九江县| 仪陇县| 永修县| 武安市| 郴州市| 伽师县| 沙坪坝区| 牙克石市| 长丰县| 天等县| 淮南市| 杭州市| 沈阳市|