單例模式特點:
-
只能有一個實例。
-
必須自行創建這個實例。
-
必須給其他對象提供這一實例
單例模式應用場景
-
應用程序與數據庫打交道的場景,在一個應用中會存在大量的數據庫操作,針對數據庫句柄連接數據庫的行為,使用單例模式可以避免大量的new操作。因為每一次new操作都會消耗系統和內存的資源。
-
WEB開發中的全局配置類文件等都可以使用單例模式。
-
redis示例、memcached示例等等。類似的場景很多、一個系統只要是有且只需要一個實例的類都可以考慮此設計模式。
簡而言之、一個站點有也只需要有一個實例對象的類都可以使用單例模式來設計。以下只是平時簡單的單例寫法示例。僅供參考!
簡單的單例類的寫法示例
<?php /** *簡而言之、一個站點有也只能有一個實例對象的類都可以使用單例模式來設計。以下只是平時簡單的單例寫法示例。僅供參考! */ class Conf { //為了保證該單一實例不被外部修改,使用private static private $_instance = null; private $_settings = []; //對外公開的獲取單例示例的方法 static function getInstance() { //首次反問時內部創建一個示例、並保存於靜態變量中 if (self::$_instance == null) { self::$_instance = new Conf(); } //返回conf的實例 return self::$_instance; } //為了避免外面用 new 和 clone來創建而外的實例。此處創建一個私有的 construct 和 clone private function __construct() {} private function __clone() {} //設置配置值 function set($index, $value) { //此處還可以處理很多異常處理,這里不多說 $this->_settings[$index] = $value; } //獲取配置值 function get($index) { //此處還可以處理很多異常處理,這里不多說 return isset($this->_settings[$index]) ? $this->_settings[$index] : ''; } }