單例模式

概念

wiki百科:單例模式,也叫單子模式,是一種常用的軟件設(shè)計模式。 在應(yīng)用這個模式時,單例對象的類必須保證只有一個實例存在。 許多時候整個系統(tǒng)只需要擁有一個的全局對象,這樣有利于我們協(xié)調(diào)系統(tǒng)整體的行為。
通俗的說,也就是對于某一個功能只能實例化一個對象。

應(yīng)用場景

實際項目中像數(shù)據(jù)庫查詢,日志輸出,全局回調(diào),統(tǒng)一校驗等模塊。這些模塊功能單一,但需要多次訪問,如果能夠全局唯一,多次復(fù)用會大大提升性能。

單例模式的好處

1:減少頻繁創(chuàng)建,節(jié)省了cpu。
2:靜態(tài)對象公用,節(jié)省了內(nèi)存。
3:功能解耦,代碼易維護(hù)。

如何設(shè)計單例

通過上面的描述,單例的核心是,實例一次生成,全局唯一,多次調(diào)用。因此在單例模式必須包含三要素:
1:私有化構(gòu)造函數(shù),私有化clone。也就是不能new,不能clone?!疚ㄒ弧?br> 2:擁有一個靜態(tài)變量,用于保存當(dāng)前的類?!疚ㄒ蝗绾伪4妗?br> 3:提供一個公共的訪問入口?!究梢栽L問】

代碼實現(xiàn)

<?php

class Singleton
{
    // 保存實例的靜態(tài)對象
    public static $singleInstance;
  
    // 私有化構(gòu)造方法
    private function __construct()
    {
    }

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

    }


    /**
     * 聲明靜態(tài)調(diào)用方法
     * 目的:保證該方法的調(diào)用全局唯一
     */
    public static function getInstance()
    {
        if (!self::$singleInstance) {
            self::$singleInstance = new self();
             ### 或者這樣寫     self::$_instance = new Singleton();
        }

        return self::$singleInstance;
    }


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

}

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

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

// 校驗是否是一個實例
var_dump($singleInstance === $singleInstance2);  // true ,一個對象
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容