极简架构模式-服务定位器模式
服务定位器模式 - 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
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: