濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > PHP設(shè)計(jì)模式之單例模式入門與應(yīng)用詳解

PHP設(shè)計(jì)模式之單例模式入門與應(yīng)用詳解

熱門標(biāo)簽:電銷機(jī)器人沒(méi)有效果怎么樣 杭州語(yǔ)音電銷機(jī)器人 欣思維地圖標(biāo)注 高德地圖標(biāo)注店鋪收費(fèi)嗎 江西電銷機(jī)器人收費(fèi) 江門回?fù)芡夂粝到y(tǒng) 高德地圖標(biāo)注位置怎么標(biāo)注 天潤(rùn)融通外呼系統(tǒng)好嗎 泊頭在哪里辦理400電話

本文實(shí)例講述了PHP設(shè)計(jì)模式之單例模式入門與應(yīng)用。分享給大家供大家參考,具體如下:

單例模式,是一種常用的軟件設(shè)計(jì)模式,在它的核心結(jié)構(gòu)中只包含一個(gè)被稱為單例的特殊類。通過(guò)單例模式可以保證系統(tǒng)中一個(gè)類只有一個(gè)實(shí)例,即一個(gè)類只有一個(gè)對(duì)象實(shí)例。通俗來(lái)講就是通過(guò)提供自身共享實(shí)例的訪問(wèn),單例設(shè)計(jì)模式用于限制特定對(duì)象只能被創(chuàng)建一次,來(lái)看下這個(gè)單例模式的要點(diǎn):

1.一個(gè)類只能有一個(gè)對(duì)象;

2.必須是自行創(chuàng)建這個(gè)類的對(duì)象;

3,要想整個(gè)系統(tǒng)提供這一個(gè)對(duì)象;

從具體實(shí)現(xiàn)的角度來(lái)說(shuō),可以按著下面這三點(diǎn)來(lái)理解:

一是單例模式的類只提供私有的構(gòu)造函數(shù),

二是類定義中含有一個(gè)該類的靜態(tài)私有對(duì)象,

三是該類提供了一個(gè)靜態(tài)的公有的函數(shù)用于創(chuàng)建或獲取它本身的靜態(tài)私有對(duì)象。

最主要的就是還要有一個(gè)private的clone方法,防止克隆,得記得哈。

優(yōu)點(diǎn)如下:

一、實(shí)例控制

單例模式會(huì)阻止其他對(duì)象實(shí)例化其自己的單例對(duì)象的副本,從而確保所有對(duì)象都訪問(wèn)唯一實(shí)例。

二、靈活性

因?yàn)轭惪刂屏藢?shí)例化過(guò)程,所以類可以靈活更改實(shí)例化過(guò)程。

缺點(diǎn)如下:

一、開(kāi)銷

雖然數(shù)量很少,但如果每次對(duì)象請(qǐng)求引用時(shí)都要檢查是否存在類的實(shí)例,將仍然需要一些開(kāi)銷??梢酝ㄟ^(guò)使用靜態(tài)初始化解決此問(wèn)題。

二、可能的開(kāi)發(fā)混淆

使用單例對(duì)象(尤其在類庫(kù)中定義的對(duì)象)時(shí),開(kāi)發(fā)人員必須記住自己不能使用new關(guān)鍵字實(shí)例化對(duì)象。因?yàn)榭赡軣o(wú)法訪問(wèn)庫(kù)源代碼,因此應(yīng)用程序開(kāi)發(fā)人員可能會(huì)意外發(fā)現(xiàn)自己無(wú)法直接實(shí)例化此類。

三、對(duì)象生存期

不能解決刪除單個(gè)對(duì)象的問(wèn)題。在提供內(nèi)存管理的語(yǔ)言中(例如基于.NET Framework的語(yǔ)言),只有單例類能夠?qū)е聦?shí)例被取消分配,因?yàn)樗瑢?duì)該實(shí)例的私有引用。在某些語(yǔ)言中(如 C++),其他類可以刪除對(duì)象實(shí)例,但這樣會(huì)導(dǎo)致單例類中出現(xiàn)懸浮引用。

來(lái)看下咱寫的案例 :

class Test{
  static private $instance;
  private $age;
  private $name;
  private function __construct($name,$age)
  {
    $this->name = $name;
    $this->age = $age;
    echo "construct".PHP_EOL;
  }
  private function __clone()
  {
    // TODO: Implement __clone() method.
  }
  static public function set_name($name,$age)
  {
    if (!self::$instance instanceof self) {
       self::$instance = new self($name,$age);
     }
     return self::$instance;
  }
  public function get_name()
  {
    echo $this -> name.PHP_EOL;
    echo $this -> age.PHP_EOL;
  }
}
$object_1 = Test::set_name("cuijinpeng","26");
$object_1->get_name();
echo "br>";
$object_2 = Test::set_name("luyaran","27");
$object_2->get_name();

運(yùn)行結(jié)果:

construct cuijinpeng 26
cuijinpeng 26

從上述實(shí)例中,我們可以看出,$object_1創(chuàng)建對(duì)象后,參數(shù)是"cuijinpeng","26",但是$object_2并沒(méi)有創(chuàng)建對(duì)象,而是直接使用$instance保存的唯一對(duì)象,所以輸出的參數(shù)并沒(méi)有變?yōu)?luyaran","27"。

好啦,本次記錄就到這里了。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • PHP pthreads v3下worker和pool的使用方法示例
  • PHP-FPM 設(shè)置多pool及配置文件重寫操作示例
  • PHP設(shè)計(jì)模式之建造者模式(Builder)原理與用法案例詳解
  • PHP設(shè)計(jì)模式之適配器模式(Adapter)原理與用法詳解
  • PHP設(shè)計(jì)模式之策略模式(Strategy)入門與應(yīng)用案例詳解
  • PHP設(shè)計(jì)模式之觀察者模式入門與應(yīng)用案例詳解
  • php設(shè)計(jì)模式之單例模式用法經(jīng)典示例分析
  • php設(shè)計(jì)模式之觀察者模式定義與用法經(jīng)典示例
  • 淺談PHP設(shè)計(jì)模式之對(duì)象池模式Pool

標(biāo)簽:銅川 寶雞 南陽(yáng) 湛江 鎮(zhèn)江 黃南 婁底 宜賓

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP設(shè)計(jì)模式之單例模式入門與應(yīng)用詳解》,本文關(guān)鍵詞  PHP,設(shè)計(jì)模式,之單例,模式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP設(shè)計(jì)模式之單例模式入門與應(yīng)用詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PHP設(shè)計(jì)模式之單例模式入門與應(yīng)用詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    定日县| 宝山区| 宜君县| 东安县| 阳高县| 萝北县| 阜平县| 福鼎市| 松原市| 玉田县| 抚州市| 泗阳县| 常州市| 仲巴县| 禄劝| 黑水县| 临江市| 江门市| 永嘉县| 康定县| 基隆市| 陇南市| 满洲里市| 石家庄市| 龙州县| 吴堡县| 霸州市| 上饶县| 衡水市| 红原县| 开封市| 黑河市| 唐海县| 台东县| 格尔木市| 景洪市| 青阳县| 曲阳县| 灌南县| 监利县| 彩票|