<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.byte-welt.net/index.php?action=history&amp;feed=atom&amp;title=Builder_%28Design_Pattern%29</id>
	<title>Builder (Design Pattern) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.byte-welt.net/index.php?action=history&amp;feed=atom&amp;title=Builder_%28Design_Pattern%29"/>
	<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Builder_(Design_Pattern)&amp;action=history"/>
	<updated>2026-08-10T23:57:55Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Byte-Welt Wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Builder_(Design_Pattern)&amp;diff=1561&amp;oldid=prev</id>
		<title>Swerflash: 1 Versionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Builder_(Design_Pattern)&amp;diff=1561&amp;oldid=prev"/>
		<updated>2007-06-13T17:02:27Z</updated>

		<summary type="html">&lt;p&gt;1 Versionen&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 13. Juni 2007, 17:02 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Swerflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Builder_(Design_Pattern)&amp;diff=1560&amp;oldid=prev</id>
		<title>EagleEye am 27. Februar 2007 um 18:13 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Builder_(Design_Pattern)&amp;diff=1560&amp;oldid=prev"/>
		<updated>2007-02-27T18:13:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Builder&amp;#039;&amp;#039;&amp;#039;, im Deutschen auch &amp;#039;&amp;#039;Erbauer&amp;#039;&amp;#039; genannt,  ist ein [[Design Pattern | Entwurfsmuster]] aus dem Bereich der [[Softwareentwicklung]] und gehört zur Kategorie der [[Creational Pattern]] (&amp;#039;&amp;#039;Erzeugungsmuster&amp;#039;&amp;#039;). Das Muster ist eines der sogenannten [[Gang of Four Pattern | GoF-Muster]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Zweck ==&lt;br /&gt;
Es trennt die [[Konstruktion]] eines komplexen [[Objekt]]es von dessen [[Repräsentation]]. Dadurch kann derselbe Konstruktionsprozess verschiedene Repräsentationen erzeugen. &lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
[[Entwickler]] verwenden den Builder, wenn &lt;br /&gt;
* zu einem komplexen Objekt unterschiedliche Repräsentationen existieren sollen; oder&lt;br /&gt;
* wenn die Konstruktion eines komplexen Objekts unabhängig von der Erzeugung der Bestandteile sein soll; oder&lt;br /&gt;
* wenn der Konstruktionsablauf einen internen Zustand erfordert, den man vor einem Klienten verbergen möchte.&lt;br /&gt;
&lt;br /&gt;
Typische Anwendungen sind z.B. [[Anwendungsprogramm|Applikationen]] zur [[Konvertierung]].&lt;br /&gt;
&lt;br /&gt;
== Struktur ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Teilnehmer ==&lt;br /&gt;
* Builder &lt;br /&gt;
** spezifiziert eine abstrakte Schnittstelle zur Erzeugung der Teile eines komplexen Objektes&lt;br /&gt;
* KonkreterBuilder&lt;br /&gt;
** erzeugt die Teile des komplexen Objekts durch Implementation der Schnittstelle&lt;br /&gt;
** definiert und verwaltet die von ihm erzeugte Repräsentation des Produkts (hat also internen Zustand)&lt;br /&gt;
** bietet Schnittstelle zum Auslesen des Produkts&lt;br /&gt;
* Direktor&lt;br /&gt;
** konstruiert ein komplexes Objekt unter Verwendung der Builder-Schnittstelle. Der Direktor arbeitet &amp;#039;&amp;#039;eng&amp;#039;&amp;#039; mit dem Builder zusammen: Er weiß, welche Baureihenfolge der Builder verträgt (z.B. müssen in einem Baum zuerst Blätter, dann innere Knoten erzeugt werden; oder umgekehrt). Daher ist eine weitere Verantwortung des Direktors:&lt;br /&gt;
** Entkopplung des Konstruktionsablaufs vom Klient.&lt;br /&gt;
* Produkt&lt;br /&gt;
** repräsentiert das zu konstruierende komplexe Objekt&lt;br /&gt;
** beinhaltet Klassen zur Definition der einzelnen Teile&lt;br /&gt;
&lt;br /&gt;
== Interaktion ==&lt;br /&gt;
&lt;br /&gt;
== Konsequenzen ==&lt;br /&gt;
=== Vorteile ===&lt;br /&gt;
* Die Implementationen der Konstruktion und der Repräsentationen werden isoliert.&lt;br /&gt;
* Builder verstecken ihre interne Repräsentation vor dem [[Direktor]].&lt;br /&gt;
* Neue Repräsentationen lassen sich leicht durch neue konkrete Builderklassen einfügen.&lt;br /&gt;
* Der Konstruktionsprozess wird an einer dedizierten Stelle (im Direktor) gesteuert; spätere Änderungen - etwa ein Mehrphasen-Konstruktionsprozess statt einer Einphasen-Konstruktion - lassen sich ohne Änderung der Klienten realisieren.&lt;br /&gt;
&lt;br /&gt;
=== Nachteile ===&lt;br /&gt;
* Der Konstruktion der Objekte erfordert oft Wissen über die Verwendung und Umgebung der Objekte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementierung/Beispielcode ==&lt;br /&gt;
&lt;br /&gt;
* Ein Automobil besteht aus Rädern, Motor und Karosserie. Die Bestandteile liegen als verschiedene Klassen vor (z.B. schwacher und starker Motor). Der Direktor konstruiert ein Fahrzeug, indem er eine der konkreten Builderklassen &amp;#039;&amp;#039;Geländewagen&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;Limousine&amp;#039;&amp;#039; erhält und dort die Methoden zum Bauen der Teile in der (für den Builder) richtigen Reihenfolge aufruft. Beide Klassen erben von der Builderklasse &amp;#039;&amp;#039;Fahrzeug&amp;#039;&amp;#039;. Der Direktor stellt ein Produkt her, indem er die Buildermethoden baueRäder(), baueKarosserie() und baueMotor() aufruft. Limousine erzeugt ein Teile für ein Auto, das aus normalen Rädern, Limousinenkarosserie und schwachem Motor besteht. Der Geländewagen setzt sich aus off-road Rädern, höhergelegter Karosserie und starkem Motor zusammen. Braucht der Entwickler ein Cabriolet, schreibt er einen konkreten Builder &amp;#039;&amp;#039;Cabriolet&amp;#039;&amp;#039; für Cabrioletteile.&lt;br /&gt;
&lt;br /&gt;
* Java: java.text.StringBuffer, java.io.Writer &lt;br /&gt;
* .Net: System.Text.StringBuilder, System.IO.StreamWriter&lt;br /&gt;
&lt;br /&gt;
In den Java- und .Net-Beispielen kann der Klient der Direktor sein. Eine Entkopplung, z.B. über eine [[Methode Factory (Design Pattern) | Methode Factory]], ist aber zu empfehlen.&lt;br /&gt;
&lt;br /&gt;
=== Variantionen ===&lt;br /&gt;
&lt;br /&gt;
Man kann auch das Produkt selber die Builder-Schnittstelle implementieren lassen. &lt;br /&gt;
* Vorteil: Dadurch erspart man sich u.U. einige Klassen.&lt;br /&gt;
* Konsequenz: Das erzeugte Produkt &amp;quot;schleppt&amp;quot; die Builder-Schnittstelle sein ganzes Leben mit sich herum, sodass auch später von außen Produktteile angebaut werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Verwendungen ==&lt;br /&gt;
&lt;br /&gt;
Dieses Muster wird in der Software-Analyse wegen der schwierigen Metapher selten verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Variante allerdings, wo ein Objekt selbst Verfahren zur Verfügung stellt, um weitere Teile &amp;quot;anzubauen&amp;quot;, bewährt sich in pipeline-artigen Business-Prozessen. Der Business-Prozess als Direktor weist das Dokument als Builder an, neue Teile zu erzeugen und in sich einzuhängen. Z.B. kann ein Aktenverwaltung in einzelnen Schritten Vermerke an einen &amp;quot;Aktenlauf&amp;quot; anhängen.&lt;br /&gt;
&lt;br /&gt;
== Verwandte Muster ==&lt;br /&gt;
* Die [[Abstract Factory (Design Pattern) | Abstract Factory]] ähnelt dem Builder, weil sie ebenfalls komplexe Objekte erzeugen kann. Dabei steht aber nicht die Struktur im Vordergrund, sondern die Abstraktion vom konkreten Typ der erzeugten Objekte.&lt;br /&gt;
* Der Builder erzeugt oft ein [[Composite (Design Pattern) | Composite]].&lt;br /&gt;
* Bei Applikationen zur Konvertierung ist der Direktor - oder sogar der Builder - oft ein [[Visitor (Design Pattern) | Visitor]] oder eventuell ein [[Interpreter (Design Pattern) | Interpreter]] der Struktur, die konvertiert werden soll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Design Pattern]]&lt;br /&gt;
[[Kategorie:Creational Pattern]]&lt;br /&gt;
[[Kategorie:Gang of Four Pattern]]&lt;br /&gt;
{{Wikipedia|Seite=Erbauer}}&lt;/div&gt;</summary>
		<author><name>EagleEye</name></author>
	</entry>
</feed>