Service Locator (Service Locator) weiß, wie die von einer Anwendung benötigten Dienste gefunden (erstellt oder bezogen) werden. Dienstbenutzer müssen sich nicht um die tatsächliche Implementierung des Dienstes bei der tatsächlichen Verwendung kümmern. In diesem Artikel wird Ihnen hauptsächlich das Service-Locator-Musterbeispiel für das PHP-Entwurfsmuster erläutert. Ich hoffe, es kann Ihnen helfen.
Was macht es?
Erreicht die Entkopplung von Dienstbenutzern und Diensten, ohne den Code zu ändern, sondern durch einfaches Konfigurieren und Aktualisieren des Dienstes.
UML-Diagramm
Codebeispiel
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("服务添加失败"); } }
Verwandte Themen Empfehlungen:
Detaillierte Erläuterung des Delegationsmusters von PHP-Designmustern
Detaillierte Erläuterung des Memomusters von PHP-Designmustern
Detaillierte Erläuterung des PHP-Design-Pattern-Builder-Musters
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Service-Locator-Musterbeispielen für PHP-Entwurfsmuster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!