客官,留下你的贊;成為我的粉絲,一起上車哦!評論區歡迎你的留言
你可以在這裡檢視并
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())