Heim  >  Artikel  >  Backend-Entwicklung  >  Erweiterte objektorientierte Entwurfsmuster: Builder-Muster

Erweiterte objektorientierte Entwurfsmuster: Builder-Muster

巴扎黑
巴扎黑Original
2017-05-20 15:04:491509Durchsuche

Was ist der Builder-Modus?

Ein Entwurfsmuster, das die Konstruktion eines komplexen Objekts von seiner Darstellung trennt, sodass mit demselben Konstruktionsprozess unterschiedliche Darstellungen erstellt werden können.

Design-Szenario:

Es gibt eine UserInfo-Klasse für einen Benutzer. Um diese Klasse zu erstellen, müssen Sie den Namen, das Alter, die Hobbys und andere Informationen des Benutzers erstellen Erhalten Sie die spezifischen Informationen des Benutzers.

Erstellen Sie eine UserBuilder-Benutzererstellungsklasse. Diese Klasse kapselt die komplexe Erstellung von UserInfos Namen, Alter, Hobbys und anderen Vorgängen und vereinfacht so den Erstellungsprozess von Benutzerklassen

Dies ist ein Benutzer Klasse

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;
    }
}

Zu diesem Zeitpunkt müssen wir die Informationen eines Benutzers erhalten. Der Prozess ist wie folgt:

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

Das erhaltene Ergebnis ist:

Dies ist der Name der Person: Songtao
Alter: 23
Hobby: Kriminalromane

Erstellen Sie zu diesem Zeitpunkt eine Benutzer-Builder-Klasse

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();
    }
}

Dies kapselt den komplexen Erstellungsprozess in der builderPeople-Methode. Der nächste Schritt besteht darin, das Objekt zu erstellen:

$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();

Das Ausgabeergebnis ist:

Der Name der Person ist: Songtao
Alter: 23
Hobby: Kriminalromane

Vorteile:

Das Builder-Muster kann die Implementierung eines Objekts gut von der zugehörigen „Geschäftslogik“ trennen, sodass es ohne Änderung des Ereignisses verwendet werden kann Logik, wodurch es sehr einfach ist, Implementierungen hinzuzufügen (oder zu ändern).

Nachteile:

Eine Änderung der Builder-Schnittstelle führt zu einer Änderung aller Ausführungsklassen.

Das Builder-Muster sollte in den folgenden Situationen verwendet werden:

1 Das zu generierende Produktobjekt weist eine komplexe interne Struktur auf.
2. Die Eigenschaften der zu generierenden Produktobjekte hängen voneinander ab und der Builder-Modus kann die Generierungsreihenfolge erzwingen.
3. Während des Objekterstellungsprozesses werden einige andere Objekte im System verwendet. Diese Objekte sind während des Erstellungsprozesses von Produktobjekten nicht einfach zu erhalten.

Anhand der obigen Beispiele können wir die Auswirkungen des Builder-Modus ermitteln:
1. Durch die Verwendung des Builder-Modus kann das interne Erscheinungsbild des Produkts unabhängig geändert werden. Durch die Verwendung des Builder-Musters ist es nicht mehr erforderlich, dass der Kunde die Details des internen Aufbaus des Produkts kennt.
2. Jeder Builder ist relativ unabhängig und hat nichts mit anderen Buildern zu tun (unabhängige Steuerlogik).
3. Das durch den Modus erstellte Endprodukt ist einfacher zu steuern.

Der Unterschied zwischen Builder-Modus und Factory-Modus:

Wir können sehen, dass Builder-Modus und Factory-Modus insgesamt sehr ähnlich sind Andererseits hat der Builder-Modus nur eine „Regisseur“-Rolle mehr als der Factory-Modus. Wenn im Klassendiagramm des Builder-Musters die Director-Klasse als der letztendlich aufgerufene Client betrachtet wird, kann der Rest des Diagramms als einfaches Factory-Muster betrachtet werden.

Im Vergleich zum Factory-Muster wird das Builder-Muster im Allgemeinen zum Erstellen komplexerer Objekte verwendet. Da der Objekterstellungsprozess komplizierter ist, wird der Objekterstellungsprozess in eine neue Klasse unterteilt – den Director-Typ. Mit anderen Worten: Das Factory-Muster kapselt den gesamten Objekterstellungsprozess in der Factory-Klasse, und die Factory-Klasse stellt im Builder-Muster das Endprodukt für den Client bereit. Die Builder-Klasse stellt im Allgemeinen nur die Konstruktion jeder Komponente in der Produktklasse bereit . Der konkrete Bauablauf wird der Direktorenklasse übergeben. Die Director-Klasse ist dafür verantwortlich, jede Komponente gemäß bestimmten Regeln zu einem Produkt zu konfigurieren und das zusammengebaute Produkt dann an den Kunden zu liefern.

Das obige ist der detaillierte Inhalt vonErweiterte objektorientierte Entwurfsmuster: Builder-Muster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn