單例做爲一個最經典的設計模式之一,到底什麼是單例?爲何要用單例?怎麼設計單例?php中單例如何具體實現?php
wiki百科:單例模式,也叫單子模式,是一種經常使用的軟件設計模式。 在應用這個模式時,單例對象的類必須保證只有一個實例存在。 許多時候整個系統只須要擁有一個的全局對象,這樣有利於咱們協調系統總體的行爲。設計模式
通俗的說,也就是對於某一個功能只能實例化一個對象
。函數
實際項目中像數據庫查詢,日誌輸出,全局回調,統一校驗
等模塊。這些模塊功能單一
,但須要屢次訪問
,若是可以全局惟一,屢次複用
會大大提高性能。這也就是單例存在的必要性。性能
單例模式的好處:ui
1:減小頻繁建立,節省了cpu。.net
2:靜態對象公用,節省了內存。設計
3:功能解耦,代碼已維護。日誌
經過上面的描述,單例的核心是,實例一次生成,全局惟一,屢次調用
。所以在單例模式必須包含三要素:code
1:私有化構造函數,私有化clone。也就是不能new,不能clone。【惟一】對象
2:擁有一個靜態變量,用於保存當前的類。【惟一如何保存】
3:提供一個公共的訪問入口。【能夠訪問】
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 ,一個對象