理解php單例模式

單例做爲一個最經典的設計模式之一,到底什麼是單例?爲何要用單例?怎麼設計單例?php中單例如何具體實現?php

1、什麼是單例

wiki百科:單例模式,也叫單子模式,是一種經常使用的軟件設計模式。 在應用這個模式時,單例對象的類必須保證只有一個實例存在。 許多時候整個系統只須要擁有一個的全局對象,這樣有利於咱們協調系統總體的行爲。設計模式

通俗的說,也就是對於某一個功能只能實例化一個對象函數

2、爲何用單例

實際項目中像數據庫查詢,日誌輸出,全局回調,統一校驗等模塊。這些模塊功能單一,但須要屢次訪問,若是可以全局惟一,屢次複用會大大提高性能。這也就是單例存在的必要性。性能

單例模式的好處:ui

  • 1:減小頻繁建立,節省了cpu。.net

  • 2:靜態對象公用,節省了內存。設計

  • 3:功能解耦,代碼已維護。日誌

3、如何設計單例

經過上面的描述,單例的核心是,實例一次生成,全局惟一,屢次調用。所以在單例模式必須包含三要素:code

  • 1:私有化構造函數,私有化clone。也就是不能new,不能clone。【惟一】對象

  • 2:擁有一個靜態變量,用於保存當前的類。【惟一如何保存】

  • 3:提供一個公共的訪問入口。【能夠訪問】

4、php實現

php 實現的單例模式

<?php

class XiaozhuaiSingleton
{
    // 私有化構造方法
    private function __construct()
    {

    }

    // 私有化clone方法
    private function __clone()
    {

    }


    // 保存實例的靜態對象
    public static $singleInstance;

    /**
     * 聲明靜態調用方法
     * 目的:保證該方法的調用全局惟一
     *
     * @return XiaozhuaiSingleton
     */
    public static function getInstance()
    {
        if (!self::$singleInstance) {
            self::$singleInstance = new self();
        }

        return self::$singleInstance;
    }


    // 調用單例的方法
    public function singletonFunc()
    {
        echo "call single ton method";
    }

}

$singleInstance = XiaozhuaiSingleton::getInstance();
$singleInstance->singletonFunc();

$singleInstance2 = XiaozhuaiSingleton::getInstance();
$singleInstance2->singletonFunc();

// 校驗是不是一個實例
var_dump($singleInstance === $singleInstance2);  // true ,一個對象

【轉載請註明:理解php單例模式 | 靠譜崔小拽

相關文章
相關標籤/搜索