Zum Inhalt springen

Design Pattern: Fluent Interface

Diese Design Pattern ist sehr interessant und dabei auch noch sehr einfach. Wenn man eine Klasse definiert hat man normalerweise private Attribute, die man über Setter und Getter anspricht. Wenn man 3-4 Attribute auf einmal befüllen will, kann man eine convenience-Methode definieren. Dies hat den Nachteil, dass man Sinn eines Wertes nicht auf den ersten Blick sieht und man dann doch die IDE bemühen muss. Alternativ kann man auch die Setter nacheinander aufrufen. Um das ganze zu verschönern und zu vereinfachen nutzt man ein Fluent Interface.

Man passt nur die Setter an, sodass diese Methoden die Instanz zurückgeben. Dadurch kann man die Setter aneinander reihen. Als Beispiel gibt es die Klasse Person.

class Person {

    private $nachname;
    private $vorname;
    private $strasse;
    private $plz;
    private $ort;

    function setNachname($nachname) {
        $this->nachname = $nachname;
        return $this;
    }

    function setVorname($vorname) {
        $this->vorname = $vorname;
        return $this;
    }

    function setStrasse($strasse) {
        $this->strasse = $strasse;
        return $this;
    }

    function setPlz($plz) {
        $this->plz = $plz;
        return $this;
    }

    function setOrt($ort) {
        $this->ort = $ort;
        return $this;
    }
}

Ein Aufruf sieht dann so aus:

$myPerson = new Person();
$myPerson->setVorname("Max")->setNachname("Mustermann");
$myPerson->setOrt("Musterstadt")->setPlz("1234");

Die Methoden kann man natürlich alle hintereinande reihen, hier wäre dies aber zu unübersichtlich.

Ein sehr prominentes Beispiel für dieses Design Pattern ist die js-Bibliothek jQuery. Interessant ist, dass dieses Designpattern nicht nur eine effizientere Entwicklung ermöglicht, sondern auch mit sehr wenig Aufwand zu realisieren ist.

Published inAllgemein

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close