<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://mletkin.net/index.php?action=history&amp;feed=atom&amp;title=Builder%3ALocation</id>
	<title>Builder:Location - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://mletkin.net/index.php?action=history&amp;feed=atom&amp;title=Builder%3ALocation"/>
	<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Builder:Location&amp;action=history"/>
	<updated>2026-05-06T15:26:43Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MimiPedia</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://mletkin.net/index.php?title=Builder:Location&amp;diff=205&amp;oldid=prev</id>
		<title>Ullrich: Die Seite wurde neu angelegt: „Kategorie:Java Kategorie:Builder =Wohin mit dem Builder?= Es giebt zwei Orte, an dem man den Builder unterbringen kann. Man kann ihn als separate Klasse &#039;&#039;irgendwo&#039; ablegen,&#039;&#039; oder man kann ihn als member class in der Generat-Klasse ansiedeln. Wo man den Builder unterbringt ist  wohl im wesentlichen eine Geschmacksfrage. Hat man keine Möglichkeit die Generat-Klasse zu ändern, bleibt allerdings nur die Möglichkeit, den Builder als separate Klass…“</title>
		<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Builder:Location&amp;diff=205&amp;oldid=prev"/>
		<updated>2025-02-24T16:08:46Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „&lt;a href=&quot;/index.php?title=Kategorie:Java&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Kategorie:Java (Seite nicht vorhanden)&quot;&gt;Kategorie:Java&lt;/a&gt; &lt;a href=&quot;/index.php?title=Kategorie:Builder&quot; title=&quot;Kategorie:Builder&quot;&gt;Kategorie:Builder&lt;/a&gt; =Wohin mit dem Builder?= Es giebt zwei Orte, an dem man den Builder unterbringen kann. Man kann ihn als separate Klasse &amp;#039;&amp;#039;irgendwo&amp;#039; ablegen,&amp;#039;&amp;#039; oder man kann ihn als member class in der Generat-Klasse ansiedeln. Wo man den Builder unterbringt ist  wohl im wesentlichen eine Geschmacksfrage. Hat man keine Möglichkeit die Generat-Klasse zu ändern, bleibt allerdings nur die Möglichkeit, den Builder als separate Klass…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Builder]]&lt;br /&gt;
=Wohin mit dem Builder?=&lt;br /&gt;
Es giebt zwei Orte, an dem man den Builder unterbringen kann. Man kann ihn als separate Klasse &amp;#039;&amp;#039;irgendwo&amp;#039; ablegen,&amp;#039;&amp;#039;&lt;br /&gt;
oder man kann ihn als member class in der Generat-Klasse ansiedeln. Wo man den Builder unterbringt ist  wohl im&lt;br /&gt;
wesentlichen eine Geschmacksfrage. Hat man keine Möglichkeit die Generat-Klasse zu ändern, bleibt allerdings nur&lt;br /&gt;
die Möglichkeit, den Builder als separate Klasse zu implementieren.&lt;br /&gt;
&lt;br /&gt;
==Der Builder als eigene Klasse==&lt;br /&gt;
Eigentlich giebt es hierzu nicht viel zu sagen, der Aufbau des Builder ist ziemlich simpel. nehmen wir als Beispiel&lt;br /&gt;
folgende Klasse als Beispiel:&lt;br /&gt;
{{java|code=&lt;br /&gt;
class Person {&lt;br /&gt;
   private String vorname;&lt;br /&gt;
   public String getVorname() {&lt;br /&gt;
      return vorname;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public String setVorname(String vorname) {&lt;br /&gt;
      this.vorname = vorname;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
dann sieht der Builder dazu so aus:&lt;br /&gt;
{{java|code=&lt;br /&gt;
class PersonBuilder {&lt;br /&gt;
   private Person person = new Person();&lt;br /&gt;
&lt;br /&gt;
   public PersonBuilder withVorname(String vorname) {&lt;br /&gt;
      person.setVorname(vorname);&lt;br /&gt;
      return this;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   public Person get() {&lt;br /&gt;
      return person;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Nichts Aufregendes hier. Wenn der Builder im gleichen Package angesiedelt ist wie die Generat-Klasse&lt;br /&gt;
und die Felder des Generats package visibility haben (public sollten sie niemals sein), dann können wir&lt;br /&gt;
die Modifier-Methoden darauf umschreiben und auf die Indirektion durch den setter verzichten:&lt;br /&gt;
{{java|code=&lt;br /&gt;
public PersonBuilder withVorname(String vorname) {&lt;br /&gt;
   person.vorname = vorname;&lt;br /&gt;
   return this;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
In diesem Falle können wir auf den Setter in der Generat-Klasse verzichten und das Feld im Generat&lt;br /&gt;
immutable machen, oder wir können den Builder für die Manipulation verwenden. Auf diese Weise können &lt;br /&gt;
wir die vollkommene Kontrolle über die Generat-Felder halten.&lt;br /&gt;
&lt;br /&gt;
==Der Builder als member class==&lt;br /&gt;
Über den Unterschied zwischen member class und inner class sein an dieser Stelle auf die Java-Spec&lt;br /&gt;
verwiesen. Es genüge an dieser Stelle, daß die member class -- im Gegensatz zur inner class -- unabhängig&lt;br /&gt;
von der sie umgebenden Klasse zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
Wir verwenden die gleiche Klasse wie oben und fügen den Builder dort ein:&lt;br /&gt;
{{java|code=&lt;br /&gt;
class Person {&lt;br /&gt;
   private String vorname;&lt;br /&gt;
   String getVorname() {&lt;br /&gt;
      return vorname;&lt;br /&gt;
   }&lt;br /&gt;
   public static class Builder {&lt;br /&gt;
      private Person person = new Person();&lt;br /&gt;
      Builder withVorname(String vorname) {&lt;br /&gt;
         person.vorname = vorname;&lt;br /&gt;
         return this;&lt;br /&gt;
      }&lt;br /&gt;
 &lt;br /&gt;
      Person get() {&lt;br /&gt;
         return person;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Zwei Unterschiede fallen in&amp;#039;s Auge: da der Builder in der Generat-Klasse liegt, können wir ihn&lt;br /&gt;
einfach &amp;quot;Builder&amp;quot; nennen, die Verwendeung sieht damit so aus:&lt;br /&gt;
{{java|code=Person person = new Person.Builder().withVorname(&amp;quot;Peter&amp;quot;).get();}}&lt;br /&gt;
Die Sichtbarkeit der Felder spielt nun keine Rolle mehr. Da die fiel class vollen Zugriff auch&lt;br /&gt;
auf die private-Felder der Klasse hat die sie enthält, brauchen wir keine Setter mehr. Natürlich können&lt;br /&gt;
wir welche definieren, brauchen sie aber nicht für den Builder und müssen die Sichtbarkeit nicht mehr&lt;br /&gt;
aufzuweichen.&lt;/div&gt;</summary>
		<author><name>Ullrich</name></author>
	</entry>
</feed>