服务定位器模式 Service Locator Pattern
解释
服务定位器用于管理一个系统中的所有服务。
结构中包含的角色
- 抽象资源依赖(AbstractResourceDependent)
 - 具体资源依赖(ResourceDependent)
 - 服务定位器(ServiceLocator)
 - 缓存(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);
    }
}
实际应用场景
- Yii2.0的Application和Module都是继承了yii\di\ServiceLocator
 
          
99+种软件模式
                    
                    
            
            
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: