極簡設計模式-多例模式

long2ge發表於2021-12-15

定義

多例是單例的一種延伸。是指一個類有多個相同例項,而且該例項都是該類本身。

設計的原則和思想

  1. 解耦了物件的建立和使用。
  2. 不變部分是使用,變化部分是建立。
  3. 核心思想是限制物件的數量,並且對物件進行重複使用。

一句話概括設計模式

一個類有多種形態,並且每一種形態是一個單例。

結構中包含的角色

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);

實際應用場景

  1. 多個資料庫聯結器。MySQL,SQLite,redis, mongo…
  2. 多個記錄器。記錄除錯訊息,記錄錯誤訊息,記錄普通訊息
  3. VIP用一個資料庫,普通使用者用另外一套資料庫。
  4. Laravel的Request類,每個請求都會有不同的引數,所以這裡就是多例。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Long2Ge

相關文章