Explication détaillée des exemples de modèles de localisateur de services de modèles de conception PHP

小云云
Libérer: 2023-03-19 16:00:01
original
1875 Les gens l'ont consulté

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
Explication détaillée des exemples de modèles de localisateur de services de modèles de conception PHP

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("服务添加失败");
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal