Le localisateur de services (localisateur de services) sait comment localiser (créer ou obtenir) les services requis par une application. Les utilisateurs du service n'ont pas besoin de se soucier de la mise en œuvre réelle du service dans son utilisation réelle. Cet article partage principalement avec vous une explication détaillée de l'exemple de modèle de localisateur de service du modèle de conception PHP. J'espère qu'il pourra vous aider.
Que fait-il ?
Réalise le découplage des utilisateurs du service et des services, sans changer le code mais en configurant et en mettant simplement à jour le service.
Diagramme UML
Exemple de code
class ServiceLocator { /** * 服务实例索引 */ privite $_services = []; /** * 服务定义索引 */ private $_definitions = []; /** * 是否全局服务共享(单例模式) */ private $_shared = []; public function has($id){ return isset($this->_services[$id]) || isset($this->_definitions[$id]); } public function __get($id){ if($this->has($this->id)){ $this->get($id); } // another implement } public function get($id){ if(isset($this->_services[$id]) && $this->_shared[$id]){ return $this->_services[$id]; } if (isset($this->_definitions[$id])) { // 实例化 $definition = $this->_definitions[$id]; $object = Creator::createObject($definition);//省略服务实例化实现 if($this->_shared[$id]){ $this->_services[$id] = $object } return $object; } throw new Exception("无法定位服务{$id}") } public function set($id,$definition,$share = false){ if ($definition === null) { unset($this->_services[$id], $this->_definitions[$id]); return; } unset($this->_services[$id]); $this->_shared[$id] = $share; if (is_string($definition)) { return $this->_definitions[$id] = $definition; } if (is_object($definition) || is_callable($definition, true)) { return $this->_definitions[$id] = $definition; } if (is_array($definition)) { if (isset($definition['class'])) { return $this->_definitions[$id] = $definition; } } throw new Exception("服务添加失败"); } }
recommandations :
Explication détaillée du modèle de délégation des modèles de conception PHP
Explication détaillée du modèle de mémo des modèles de conception PHP
Explication détaillée du modèle de création de modèle de conception PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!