was ist der vorteil vom Builder-design pattern?

dvdlly

Aktives Mitglied
Hallo,

Kann mir jemand anhand eines einfachen code beispiels erklären, wo der Vorteil vom builder design pattern liegt? https://en.wikipedia.org/wiki/Builder_pattern

warum genau ist es vorteilhaft, das festlegen von den attributen eines objektes (also die erzeugung) von der repräsentation (also ein instanziiertes objekt?) zu trennen?

Danke!
 

dvdlly

Aktives Mitglied
Und noch eine Frage - ich möchte einen einfachen webbrowser programmieren. Ich bin momentan so weit, dass ich eine URI parse und in protokoll (http/s), authority, port und path zerlege. welche library für einen http/s request sollte ich verwenden? es gibt z.B. verschiedene Möglichkeiten für einen http request.
 

Marinek

Bekanntes Mitglied
warum genau ist es vorteilhaft, das festlegen von den attributen eines objektes (also die erzeugung) von der repräsentation (also ein instanziiertes objekt?) zu trennen?
Das ist nicht der Vorteil sondern der Weg es zu tun.

Das Ziel eines Builder Patterns ist es einen hinreichend komplexen Sachverhalt z.B. ein Haus mit 4 Wänden, Fenstern, Dach, Tür, so zu abstrahieren, dass es "einfacher" wird das Haus zusammen zu bauen.
In der Regel müssen dafür mehrere komplexe Objekte in der richtigen Reihenfolge zusammengefügt werden.

Damit ich nun nicht jedes einzelne Objekt mit allen Abhänigkeiten zusammenbauen muss, nutze ich einen Builder. Der Builder stellt Methoden bereit, die es erlauben das Haus zusammen zu bauen, ohne Kentniss der verwendeten Klassen und der Beziehungen untereinander zu haben.

Richtig spannend wird das, wenn einzelene Komponenten in Abhängigkeit der aktuellen Implementierung variieren können. (Siehe Spring Boot Security).

Edit: Im übrigen ist das Thema auch gut beschrieben: https://www.google.com/search?client=firefox-b-d&q=Example+Builder+pattern

Vielleicht kann man da sich einlesen und dann eine präzisere Frage stellen.

Und noch eine Frage - ich möchte einen einfachen webbrowser programmieren. Ich bin momentan so weit, dass ich eine URI parse und in protokoll (http/s), authority, port und path zerlege. welche library für einen http/s request sollte ich verwenden? es gibt z.B. verschiedene Möglichkeiten für einen http request.
(Offtopic: Es wäre durchaus ratsam hierfür ein weiteres Thema zu eröffnen, da dies mit der Ursprungsfrage scheinbar gar nichts gemein hat)

Uff... Das ist aber ein herber Sprung von "ich möchte verstehen wie ein Builder Pattern funktioniert" zu: Ich baue einen Browser mit Java nach.

Fraglich ist, wieso du die URL überhaupt zerlegen möchtest.? Was möchtest du damit erreichen?

Ich schlage vor eine entsprechende Wissensbasis aufzubauen. Und die Zusammenhänge ein wenig besser zu verstehen. Wenn ich mir URLConnection ansehe, dann übergebe ich da eine vollständige URL unabhängig davon, wie diese aufgebaut ist.

Denke hier liegt auch nicht die herausforderung. Die Herausforderung wird sein die HTML Inhalte zu visualisieren. Hier wird man auf bereits vorhandene Implementierungen zugreifen, um JavaScript, HTML und CSS vernünftig überein zu bekommen. Und dann bleibt für die eigene Leistung nur noch die Sachen zusammen zufügen...
 

dvdlly

Aktives Mitglied
Ich habe mir gerade das oberste Ergebnis durchgelesen https://refactoring.guru/design-patterns/builder und es ist recht gut erklärt, Danke!.
Naja, es ist schon etwas Zeit vergangen seitdem ich Softwaretechnik hatte und ich habe kaum mit Design Patterns gearbeitet.
Fraglich ist, wieso du die URL überhaupt zerlegen möchtest.? Was möchtest du damit erreichen?
Ich wollte die Klasse Socket nutzen, um eine http(s) verbindung aufzubauen. Im Nachhinein habe ich gemerkt, dass es recht low level ist und einfacher geht, da wollte ich wissen, welche Klasse(n) ich verwenden sollte.

Genau, ich werde wahrscheinlich einfach fertige Implementierungen benutzen und größtenteils nur den Austausch an Schnittstellen programmieren. Ich denke aber es ist trotzdem sehr hilfreich um 1. mit Java zu arbeiten 2. um zu verstehen wie ein browser funktioniert wenn auch nicht im Detail.
 

dvdlly

Aktives Mitglied
Okay, habt ihr denn einen Vorschlag welches Software System, das oft benutzt wird, ich in Java implementieren kann um es zu verstehen und zu üben? es stehen noch zur Auswahl: Interpreter mit VM, Compiler, OS, Datenbank und dafür wollte ich andere Sprachen benutzen.

Und kann ich nicht einfach auf hardware nähere Libraries zugreifen, um den browser zu schreiben und ein bisschen mehr selber zu machen?

https://browser.engineering/ hat ca. 3000 LOC ich finde das ist ein gutes Projekt für den Anfang.
 

LimDul

Top Contributor
Warum nicht mit etwas kleinerem Anfangen? z.B. ein simples Memory Spiel (wenn es GUI sein soll). Oder einen simplen Chat der über TCP/IP kommunziert?
 

dvdlly

Aktives Mitglied
Es ist schon eine Weile her, aber ich habe mal einen Chat TCP/IP Chat mit Datenbank über eine Kommandozeile geschrieben.
Ich traue mir etwas größere Projekte zu und denke mit dem Begleitmaterial das ich habe sollte es klappen.
 

KonradN

Super-Moderator
Mitarbeiter
Also generell sollte fast alles möglich sein. Betriebssystem wird etwas problematischer, aber selbst da könnte man - mit gewissen Abstrichen - einiges machen / überlegen.

Und kann ich nicht einfach auf hardware nähere Libraries zugreifen, um den browser zu schreiben und ein bisschen mehr selber zu machen?
Natürlich kannst Du da auch einiges machen. JNI, JNA wären da so zwei Stichworte.

Ansonsten kannst Du selbst den Aufbau ansehen. Java ist mit dem Open JDK Open Source. JavaFX ist mit openjfx Open Source. Damit stehen Dir die Sourcen zur Verfügung. Du kannst also schauen, was die WebView macht, wie da die diversen Aufgaben unterteilt sind u.s.w.

Zu den meisten Punkten gibt es Open Source Projekte, die zeigen, wie es gehen könnte. Interpreter gibt es diverse auch in Java. Datenbanken gibt es diverse in Java. Compiler habe ich gerade kein Projekt im Hinterkopf, aber der Java Compiler wäre da ggf. ein Beispiel.

Aber ich frage. mich derzeit, was der Sinn hinter diesem Thread ist. Denn wenn Du so eine Aufgabe hast, dann solltest Du da strukturiert heran gehen. Ein erster Ansatz wäre, einfach einmal mit zu jeder Option eine Grobplanung zu versuchen. Also einfach mal paar Minuten nachdenken, was hinter der Aufgabe steckt, was man da entwickeln könnte. Dann hast Du eine erste Idee. Und dann kannst Du die Aufgabe, die Dich interessiert, im Detail planen.

Und wenn es der WebBrowser sein soll: Dann solltest Du die grobe Planung doch bereits haben! Und dann sollte die Aufgabe auch im Detail bekannt sein: Was ist denn die genaue Aufgabe? Was soll da entstehen? Ein kompletter (moderner) Webbrowser ist aus meiner Sicht schlicht zu komplex für eine Studienaufgabe. Und ich weiss nicht, was da denn der Anspruch ist. Der Webbrowser umfasst aus meiner Sicht einiges:
a) Die Kommunikation - hier ist also http und https wichtig. Hier auf eine fertige Library setzen: Denkbar, aber ist das sinnvoll? Das muss man im Detail bedenken.
b) Das was man zurück bekommt, muss man auswerten. Das fängt beim Status an und geht dann über diverse Encoding u.s.w.
c) Darstellung - da muss man sich überlegen, wie das angezeigt werden soll. Grafische Darstellung ist recht komplex und erfordert recht viele Berechnungen. Das kann jedes Studienprojekt sprengen fürchte ich.
d) JavaScript hast Du erwähnt - Das wäre dann bereits eine eigenständige Aufgabe....

Also wird schnell deutlich: Gewisse Dinge nimmt man als Library oder man lässt es weg. WebBrowser könnte also ein reiner Textbasierter Browser sein. Dann läge der Schwerpunkt auf http, TLS/SSL würde man fertige Lösungen nehmen. Inhalte wären auszuwerten (um ggf. mehr nachzuladen).
Und dann wird am Ende einfach alles auf Textbasis ausgegeben.

Ggf. baut man den Inhalt auch als XML auf (also repariert sozusagen das HTML) um dann ein Transform zu haben das dann verwendet werden kann. Wäre evtl. auch eine Idee.

Aber hier ist halt wichtig:
  • Die Planung und die Überlegungen müssen von Dir kommen. Die Dozenten / Professoren sind doch nicht blöd und dieses Forum wird auch von Google und Co indiziert.
  • Wir kennen die genauen Anforderungen nicht - das was wir "meinen" kann also von den Anforderungen abweichen.
  • Egal was Du machst: Du musst auch eine Recherche durchführen zu diversen Punkten. Da ist der Umgang mit Suchmaschinen wichtig. Alleine schon, damit Du die entsprechenden Themen auch vertiefst. Du nutzt eine Library für http/https und hast dann einen Webbrowser geschrieben ohne etwas zu den Protokollen zu sagen? Wird vermutlich nicht die Anforderungen erfüllen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Primitiver Datentyp Short , Vorteil/Nachteil Betrachtung Java Basics - Anfänger-Themen 6
S vorteil/nachteil static Java Basics - Anfänger-Themen 19
K Priority Queue - wo ist denn jetzt der Vorteil? Java Basics - Anfänger-Themen 7
B Vorteil von Graphic2D und BufferedImage? Java Basics - Anfänger-Themen 6
Encera Scene Builder Scroll Bar Java Basics - Anfänger-Themen 4
J Windows Builder auf Eclipse portable Java Basics - Anfänger-Themen 1
T Scene Builder 2 Java Basics - Anfänger-Themen 21
das_leon Interface Frame in einem Frame (Window Builder) Java Basics - Anfänger-Themen 2
J Builder Pattern implementieren Java Basics - Anfänger-Themen 3
P Window Builder Reiter im Fenster erstellen Java Basics - Anfänger-Themen 7
L Input/Output GUI Builder und Texteingaben Java Basics - Anfänger-Themen 10
H [JAVA] NetBeans GUI Builder - Events Java Basics - Anfänger-Themen 10
A Windows Builder Java Basics - Anfänger-Themen 4
G Problem mit Plugininstallation: Window Builder Pro Java Basics - Anfänger-Themen 5
J Welchen kostenlosen GUI-Builder nehmen? Java Basics - Anfänger-Themen 5
F Werteübergabe in Swing Formularen (gui Builder) Java Basics - Anfänger-Themen 9
Spin GUI Builder in Netbeans Java Basics - Anfänger-Themen 3
M netbeans GUI builder Java Basics - Anfänger-Themen 2
U Gui Builder Java Basics - Anfänger-Themen 6
K GUI Builder Software ? Java Basics - Anfänger-Themen 6
G GUI-Builder für Eclipse Java Basics - Anfänger-Themen 6
L Netbeans GUI-Builder Kontakt zur Main Klasse Java Basics - Anfänger-Themen 3
S GUI Builder gesucht Java Basics - Anfänger-Themen 10
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
A Frage zum UML Design Java Basics - Anfänger-Themen 1
F Design pattern Java Basics - Anfänger-Themen 29
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
N design time vs build time vs compile time Java Basics - Anfänger-Themen 2
H Eclipse , Design-Modus, unvollständige Darstellung Java Basics - Anfänger-Themen 0
M LookandFeel Design Java Basics - Anfänger-Themen 4
D Design Pattern Command Java Basics - Anfänger-Themen 3
M Erste Schritte Eclipse + design view Java Basics - Anfänger-Themen 3
J Design Patterns Java Basics - Anfänger-Themen 8
Tarrew Proxy Design-Pattern Java Basics - Anfänger-Themen 1
D Besseres Design Frage Java Basics - Anfänger-Themen 1
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
J MVC- Design Frage Java Basics - Anfänger-Themen 3
C Java Klassen Design? Java Basics - Anfänger-Themen 5
OnDemand Software-Design Java Basics - Anfänger-Themen 1
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
B Warum haben Java Programme ein anderes Design? Java Basics - Anfänger-Themen 5
S Singleton (Design Patterns) Java Basics - Anfänger-Themen 16
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
Rudolf OOP Übungen zu Design Pattern in Java Java Basics - Anfänger-Themen 6
K Interface als Instanzvariable = gutes Design Java Basics - Anfänger-Themen 6
S Eclipse Design-Reiter fehlt Java Basics - Anfänger-Themen 6
D Design-Tipps für neues Programm (Excel-Charts-...) Java Basics - Anfänger-Themen 3
M Button mit eigenem Design Java Basics - Anfänger-Themen 6
R Welches Design pattern Java Basics - Anfänger-Themen 10
S Gutes Design mit statischen oder Member-Methoden Java Basics - Anfänger-Themen 53
X Externer GUI Code verwenden / (Design Ansicht) Java Basics - Anfänger-Themen 3
B OOP Frage zu Klassen Design Java Basics - Anfänger-Themen 5
Hamstinator Design und Listener in verschiedenen Klassen Java Basics - Anfänger-Themen 6
J Methoden design Java Basics - Anfänger-Themen 3
hdi Design-Problem Java Basics - Anfänger-Themen 2
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
Q Listen - DefaultListModel trotz Design ueber GUI? Java Basics - Anfänger-Themen 10
B Java-Anwendung im Windows Design Java Basics - Anfänger-Themen 8
hdi Design-Frage: bin unzufrieden Java Basics - Anfänger-Themen 11
M code design Java Basics - Anfänger-Themen 14
M log4j design Java Basics - Anfänger-Themen 11
D Design Fragen Java Basics - Anfänger-Themen 5
M Design: Abfrage auf korrekte Eingabe Java Basics - Anfänger-Themen 4
W Design Problem Java Basics - Anfänger-Themen 7
T Wie wichtig ist Design Patterns in einer Firma? Java Basics - Anfänger-Themen 8
M Java Design Frage Java Basics - Anfänger-Themen 2
S log4j "Richtiges" Design Java Basics - Anfänger-Themen 4
D JButton - Design ändern Java Basics - Anfänger-Themen 8
S Frage zum Design der Vererbung (Kartendeck und Dupletten) Java Basics - Anfänger-Themen 12
S Design Frage Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben