J2EE模式-服務定位器模式

long2ge發表於2021-12-17

解釋

服務定位器用於管理一個系統中的所有服務。

結構中包含的角色

  1. 抽象資源依賴(AbstractResourceDependent)
  2. 具體資源依賴(ResourceDependent)
  3. 服務定位器(ServiceLocator)
  4. 快取(Cache)

最小可表達程式碼

interface AbstractResourceDependent {}

class ResourceDependent implements AbstractResourceDependent {}

class ServiceLocator
{
    private static $cache = [];

    public static function getService(String $jndiName)
    {
    $service = self::$cache[$jndiName];

        if (null == $service) {

            if (AbstractResourceDependent::class == $jndiName) {
                $service = new ResourceDependent();
            }

            // 註冊
            self::$cache[$jndiName] = $service;
        }

    return $service;
    }
}

class Resource
{
    private $abstractResourceDependent;

    public function __construct()
    {
        // 控制反轉 - 控制權轉移到服務定位器
        $this->abstractResourceDependent = ServiceLocator::getService(AbstractResourceDependent::class);
    }
}

實際應用場景

  1. Yii2.0的Application和Module都是繼承了yii\di\ServiceLocator
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Long2Ge

相關文章