Maison  >  Article  >  développement back-end  >  Modèles de conception avancés orientés objet : modèle de constructeur

Modèles de conception avancés orientés objet : modèle de constructeur

巴扎黑
巴扎黑original
2017-05-20 15:04:491504parcourir

Qu'est-ce que le mode constructeur ?

Un modèle de conception qui sépare la construction d'un objet complexe de sa représentation afin que le même processus de construction puisse créer différentes représentations.

Scénario de conception :

Il existe une classe UserInfo pour un utilisateur Pour créer cette classe, vous devez créer le nom, l'âge, les loisirs et d'autres informations de l'utilisateur. obtenir les informations spécifiques de l'utilisateur.

Créez une classe de création d'utilisateurs UserBuilder. Cette classe encapsule les opérations complexes de création de noms, d'âges, de loisirs, etc. de UserInfo, simplifiant le processus de création de classes d'utilisateurs

C'est ceci. a Classe d'utilisateurs

class UserInfo
{    
          protected $_userName;    
          protected $_userAge;    
          protected $_userHobby;    
     
     public function setUserName($userName)
    {        
            $this->_userName = $userName;
    }    
    
    public function setUserAge($userAge)
    {        
            $this->_userAge = $userAge;
    }    
    
    public function setUserHobby($userHobby)
    {        
            $this->_userHobby = $userHobby;
    }    
    
    public function getPeopleInfo()
    {        
           echo  "<br>这个人的名字是:" . $this->_userName . "<br>年龄为:" . $this->_userAge . "<br>爱好:" . $this->_userHobby;
    }
}

A ce moment nous devons obtenir les informations d'un utilisateur Le processus est le suivant :

$modelUser = new UserInfo();
$modelUser->setUserName(&#39;松涛&#39;);
$modelUser->setUserAge(&#39;23&#39;);
$modelUser->setUserHobby(&#39;推理小说&#39;);
$modelUser->getPeopleInfo();

Le résultat obtenu est :

Ceci Le nom de la personne est : Songtao

L'âge est : 23
Hobby : Romans policiers

À ce moment, créez une classe de constructeur d'utilisateurs

class UserBuilder
{    
      protected $_obj;    

      public function __construct()
    {        
            $this->_obj = new UserInfo();
    }   
    
     public function builderPeople($userInfo)
    {       
            $this->_obj->setUserName($userInfo[&#39;userName&#39;]);
            $this->_obj->setUserAge($userInfo[&#39;userAge&#39;]); 
            $this->_obj->setUserHobby($userInfo[&#39;userHobby&#39;]);
    }    
    
     public function getBuliderPeopleInfo()
    {        
            $this->_obj->getPeopleInfo();
    }
}
Cela résume le processus de création complexe dans la méthode builderPeople. L'étape suivante consiste à créer l'objet :

$userArr = array(    &#39;userName&#39; => &#39;松涛&#39;,
    &#39;userAge&#39; => &#39;23&#39;,
    &#39;userHobby&#39; => &#39;推理小说&#39;);
    $modelUserBuilder = new UserBuilder();
    $modelUserBuilder->builderPeople($userArr);
    $modelUserBuilder->getBuliderPeopleInfo();
Le résultat de sortie est :

Le nom de la personne est : Songtao

L'âge est : 23
Passe-temps : Romans policiers

Avantages :

Le modèle constructeur peut très bien séparer l'implémentation d'un objet de la logique "métier" associée, afin qu'il puisse être utilisé sans changer la logique d'événement, ce qui rend très facile l'ajout (ou la modification) d'implémentations.

Inconvénients :

La modification de l'interface du constructeur entraînera une modification de toutes les classes d'exécution.

Le modèle de constructeur doit être utilisé dans les situations suivantes :

1. L'objet produit qui doit être généré a une structure interne complexe.

2. Les propriétés des objets produits qui doivent être générés dépendent les unes des autres et le mode constructeur peut forcer l'ordre de génération.
3. Pendant le processus de création d'objets, certains autres objets du système seront utilisés. Ces objets ne sont pas faciles à obtenir lors du processus de création d'objets produits.

Sur la base des exemples ci-dessus, nous pouvons obtenir les effets du mode constructeur :

1. L'utilisation du mode constructeur permet de changer indépendamment l'apparence interne du produit. L'utilisation du modèle de construction élimine le besoin pour le client de connaître les détails de la composition interne du produit.
2. Chaque Builder est relativement indépendant et n'a rien à voir avec les autres Builders (logique de contrôle indépendante).
3. Le produit final construit par le mode est plus facile à contrôler.

La différence entre le mode constructeur et le mode usine :

On voit que le mode constructeur et le mode usine sont très similaires dans l'ensemble de l'autre. D'un autre côté, le mode constructeur n'a qu'un rôle de "directeur" de plus que le mode usine. Dans le diagramme de classes du modèle de générateur, si la classe directrice est considérée comme le client qui est finalement appelé, alors le reste du diagramme peut être considéré comme un simple modèle d'usine.

Par rapport au modèle d'usine, le modèle de constructeur est généralement utilisé pour créer des objets plus complexes. Étant donné que le processus de création d'objet est plus compliqué, le processus de création d'objet est séparé pour former une nouvelle classe - le type Directeur. En d'autres termes, le modèle d'usine encapsule l'ensemble du processus de création d'objet dans la classe d'usine, et la classe d'usine fournit le produit final au client ; dans le modèle de constructeur, la classe de constructeur fournit généralement uniquement la construction de chaque composant de la classe de produit ; Le processus de construction spécifique est confié à la classe directrice. La classe directrice est chargée de configurer chaque composant dans un produit selon des règles spécifiques, puis de livrer le produit assemblé au client.

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!

Déclaration:
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