天天看點

設計模式——PHP實作單例模式

客官,留下你的贊;成為我的粉絲,一起上車哦!評論區歡迎你的留言

你可以在這裡檢視并

fork

源代碼 GitHub

單例模式

下面将圍繞

單例模式是什麼

為什麼要用單例模式

,以及怎麼用

PHP語言實作單例模式

是什麼

根據字面意思,可以簡單的了解為隻有一個執行個體的一種模式,也就是說不管new這個類多少次,始終隻有一個對象執行個體。

為什麼

一般在資料庫連接配接、鎖檔案等方面采用單例模式。拿資料庫連接配接來說,如果每次都重新建立一個新的執行個體來進行資料庫連接配接的話,會消耗性能,浪費資源。如果使用了單例模式,上次建立的連接配接執行個體還存在,會繼續使用,不進行建立;否則建立。

怎麼做

下面用PHP語言實作,完整的代碼可以到GitHub檢視或

fork

<?php 
/**
 * 單例模式
 * 特點:四私一公(四私:私有執行個體變量、私有構造方法、私有的clone、私有的wakeup; 公有的擷取執行個體方法)
 * 用途:資料庫的連接配接(不斷的建立執行個體會浪費資源,消耗性能;一個執行個體還存在,可以繼續使用,不需要再次建立)、鎖定檔案
 * @author  new1024kb
 * @link https://github.com/Echo-Mr-Pengw/Design-Pattern
 * @since  2019-12-26
 */
//終結類,防止被繼承
final class SingletonMode {

	/**
	 * [$instance 私有的執行個體變量]
	 * @var [string]
	 */
	private static $instance;
	
	/**
	 * [__construct 私有的構造方法,防止類的執行個體化]
	 */
	private function __construct() {}
	
	/**
	 * [__clone 私有的 克隆魔術方法,防止對象的clone]
	 * @return [type] [description]
	 */
	private function __clone() {}
	
	/**
	 * [__wakeup 私有的 反序列化魔術方法]
	 */
	private function __wakeup() {}
	
	/**
	 * [getInstance 擷取執行個體的靜态方法,隻能通過此方法擷取執行個體]
	 * @return [object] [對象執行個體]
	 */
	public static function getInstance() {
		if(self::$instance) {
			return self::$instance;
		}
		return new self;
	}
}
var_dump(SingletonMode::getInstance())