定義
多例是單例的一種延伸。是指一個類有多個相同例項,而且該例項都是該類本身。
設計的原則和思想
- 解耦了物件的建立和使用。
- 不變部分是使用,變化部分是建立。
- 核心思想是限制物件的數量,並且對物件進行重複使用。
一句話概括設計模式
一個類有多種形態,並且每一種形態是一個單例。
結構中包含的角色
Multiton 多例物件
最小可表達程式碼
final class Multiton
{
private static $instanceNum = 3;
private static $instances = [];
private function __construct(){}
private function __clone(){}
private function __wakeup(){}
public static function getInstance() : self
{
self::initInstances();
return self::$instances[rand(0, self::$instanceNum - 1)];
}
public static function initInstances()
{
if (count(self::$instances) <= 0) {
for ($i = 0; $i < self::$instanceNum; $i++) {
self::$instances[$i] = new static();
}
}
}
}
$multiton = Multiton::getInstance();
var_dump($multiton);
實際應用場景
- 多個資料庫聯結器。MySQL,SQLite,redis, mongo…
- 多個記錄器。記錄除錯訊息,記錄錯誤訊息,記錄普通訊息
- VIP用一個資料庫,普通使用者用另外一套資料庫。
- Laravel的Request類,每個請求都會有不同的引數,所以這裡就是多例。
本作品採用《CC 協議》,轉載必須註明作者和本文連結