Abstrakte Fabrik - LinkFang.de





Abstrakte Fabrik


Die abstrakte Fabrik (englisch abstract factory, kit) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung, das zur Kategorie der Erzeugungsmuster (englisch creational patterns) gehört. Es definiert eine Schnittstelle zur Erzeugung einer Familie von Objekten, wobei die konkreten Klassen der zu instanziierenden Objekte nicht näher festgelegt werden.[1] Das Muster ist eines der Entwurfsmuster, die von der sogenannten Viererbande (GoF) publiziert wurden.

Verwendung

Die abstrakte Fabrik wird angewendet, wenn

  • ein System unabhängig von der Art der Erzeugung seiner Produkte arbeiten soll,
  • ein System mit einer oder mehreren Produktfamilien konfiguriert werden soll,
  • eine Gruppe von Produkten erzeugt und gemeinsam genutzt werden soll oder
  • wenn in einer Klassenbibliothek die Schnittstellen von Produkten ohne deren Implementierung bereitgestellt werden sollen.

Eine typische Anwendung ist die Erstellung einer grafischen Benutzeroberfläche mit unterschiedlichen Oberflächenmotiven.

Eine abstrakte Fabrik vereinigt die Verantwortlichkeiten „Zusammenfassung der Objektgenerierung an einer Stelle“ und „Möglichkeit zu abstrakten Konstruktoren“ (siehe auch unten unter „Verwandte Entwurfsmuster“).

Akteure

AbstrakteFabrik
definiert eine Schnittstelle zur Erzeugung abstrakter Produkte einer Produktfamilie
KonkreteFabrik
erzeugt konkrete Produkte einer Produktfamilie durch Implementierung der Schnittstelle
AbstraktesProdukt
definiert eine Schnittstelle für eine Produktart
KonkretesProdukt
definiert ein konkretes Produkt einer Produktart durch Implementierung der Schnittstelle, wird durch die korrespondierende konkrete Fabrik erzeugt
Klient
verwendet die Schnittstellen der abstrakten Fabrik und der abstrakten Produkte

Vorteile

  • Der Klient ist von konkreten Klassen isoliert.[2]
  • Der Austausch von Produktfamilien ist auf einfache Art und Weise möglich.

Nachteile

Neue Produktarten lassen sich schwer hinzufügen, da in allen konkreten Fabriken Änderungen vorzunehmen sind.

Verwendung in der Analyse

Wegen der gemeinsamen Komplexität der beiden wesentlichen Verantwortungen („Zusammenfassung der Objektgenerierung an einer Stelle“ und „Möglichkeit zu abstrakten Konstruktoren“) ist dieses Entwurfsmuster für die Analyse praktisch irrelevant.

Beispiel

Es soll eine Spielesammlung per Software entwickelt werden. Die verwendeten Klassen sind dabei

  1. Spielbrett (erstes abstraktes Produkt), auf das Spielfiguren platziert werden können und das beispielsweise eine Methode besitzt, um sich auf dem Bildschirm anzuzeigen. Konkrete, davon abgeleitete Produkte sind Schachbrett, Mühlebrett, Halmabrett etc.
  2. Spielfigur (zweites abstraktes Produkt), die auf ein Spielbrett gesetzt werden kann. Konkrete, davon abgeleitete Produkte sind Hütchen, Schachfigur (der Einfachheit halber soll es hier nur einen Typ an Schachfiguren geben), Holzsteinchen etc.
  3. Spielfabrik (abstrakte Fabrik), die Komponenten (Spielbrett, Spielfiguren) eines Gesellschaftsspiels erstellt. Konkrete, davon abgeleitete Fabriken sind beispielsweise Mühlefabrik, Damefabrik, Schachfabrik, Halmafabrik etc.

Ein Klient (z. B. eine Instanz einer Spieler- oder Spielleiter-Klasse) kann sich von der abstrakten Fabrik Spielfiguren bzw. ein Spielbrett erstellen lassen. Je nachdem, welches konkrete Spiel gespielt wird, liefert beispielsweise

  • die Schachfabrik ein Schachbrett und Schachfiguren,
  • die Damefabrik ebenfalls ein Schachbrett, aber Holzsteinchen,
  • die Mühlefabrik ein Mühlebrett, aber ebenfalls Holzsteinchen,
  • die Halmafabrik ein Halmabrett und Hütchen.

Programmierbeispiel in PHP

// abstraktes Produkt A
abstract class Spielbrett {
    abstract function aufstellen();
}
// abstraktes Produkt B
abstract class Spielfigur {
    abstract function bewegen();
}
// abstrakte Fabrik
abstract class Spielfabrik {
    abstract function SpielbrettErzeugen();
    abstract function SpielfigurErzeugen();
}
// konkrete Fabrik 1
class Spielfabrik1 extends Spielfabrik {
    public function SpielbrettErzeugen() {
        return new Spielbrett1();
    }
    public function SpielfigurErzeugen() {
        return new Spielfigur1();
    }
}
// konkrete Fabrik 2
class Spielfabrik2 extends Spielfabrik {
    public function SpielbrettErzeugen() {
        return new Spielbrett2();
    }
    public function SpielfigurErzeugen() {
        return new Spielfigur2();
    }
}
 
class Spielbrett1 extends Spielbrett {
    public function aufstellen() {
        write_line("Spielbrett1 aufgestellt.");
    }
}
class Spielfigur1 extends Spielfigur {
    public function bewegen() {
        write_line("Spielfigur1 bewegt.");
    }
}
 
class Spielbrett2 extends Spielbrett {
    public function aufstellen() {
        write_line("Spielbrett2 aufgestellt.");
    }
}
class Spielfigur2 extends Spielfigur {
    public function bewegen() {
        write_line("Spielfigur2 bewegt.");
    }
}
 
function Test(Spielfabrik $fabrik) {
    $brett = $fabrik->SpielbrettErzeugen();
    $figur = $fabrik->SpielfigurErzeugen();
    $brett->aufstellen();
    $figur->bewegen();
}
 
function write_line($text) {
    print $text.'<br/>';
}
 
Test(new Spielfabrik1());
Test(new Spielfabrik2());

Ausgabe:

Spielbrett1 aufgestellt.
Spielfigur1 bewegt.
Spielbrett2 aufgestellt.
Spielfigur2 bewegt.

Verwandte Entwurfsmuster

Die abstrakte Fabrik ist einfach eine mehrfache Anwendung der Fabrikmethode. Die abstrakte Fabrik kann daher eine ganze Produktfamilie austauschbar machen, während sich die Fabrikmethode nur auf ein Produkt bezieht.

Soll generell eine zusätzliche Hierarchie von Fabriken zu einer Hierarchie von Produkten vermieden werden, kann das Muster des Prototyps verwendet werden. Bei diesem Muster werden zur Erzeugung neuer Objekte prototypische Instanzen kopiert.

Weblinks

 Commons: Abstrakte Fabrik  – Album mit Bildern, Videos und Audiodateien

Einzelnachweise

  1. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Entwurfsmuster. 5. Auflage. Addison-Wesley, 1996, ISBN 3-8273-1862-9, S. 107.
  2. Karl Eilebrecht, Gernot Starke: Patterns kompakt. Entwurfsmuster für effektive Software-Entwicklung. 3. Auflage. Spektrum Akademischer Verlag, 2010, ISBN 978-3-8274-2525-6, S. 26, doi:10.1007/978-3-8274-2526-3 .

Kategorien: Erzeugungsmuster | Viererbande-Entwurfsmuster

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Abstrakte Fabrik (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.