Während des Schreibens der Code-Richtlinien für ein Unternehmen empfahl ich , anstelle von Teleskopkonstruktoren das Builder-Muster von Effective Java zu verwenden.
Wenn Sie jedoch etwas genauer darüber nachdenken, ist es sicherlich eine elegantere Lösung, nur die Builder-Klasse und die zusätzlichen Konstruktoren mit optionalen Argumenten zu entfernen.
Haben Sie also nur den einen Konstruktor mit den erforderlichen Parametern, normalen Gettern / Setzern und kommentieren Sie den Code. Erstellen Sie bei der Implementierung einfach eine neue Instanz Ihres Objekts und legen Sie die Werte fest.
Mein ursprünglicher Gedanke war, dass der Vorteil darin bestand, die Verwirrung darüber zu beseitigen, welche Parameter optional waren und welche erforderlich waren. Der wahre Vorteil liegt jedoch in der Verwendung von Methodenverkettung / fließender Schnittstelle.
Das Builder-Muster hat Vorteile, wenn Sie viele neue Instanzen erstellen, da die Idee die Beinarbeit erledigen kann und wenn es viele (15+) optionale Parameter gibt. Lohnt es sich jedoch, die statische innere Klasse zusätzlich zu codieren? Würden Sie die Verwendung des Builders empfehlen oder ist dies Zeitverschwendung?
Antworten:
Ich neige dazu, einem Muster zu folgen, dass Konstruktoren alle obligatorischen Werte bereitstellen sollten, die zum Erstellen eines gültigen und konsistenten Objekts erforderlich sind . Bei optionalen Werten versuche ich zu überlegen, welche Standardeinstellung am häufigsten verwendet werden soll, damit Setter so wenig wie möglich verwendet werden.
Wenn ich feststelle, dass es viele optionale Werte gibt oder dass ein größerer Teil der optionalen Werte tendenziell von ihren Standardeinstellungen abweicht, verwende ich das Builder-Muster (statischer innerer Builder oder ein ähnliches Design).
Josh gibt im Allgemeinen verdammt gute Ratschläge - das Beste, was ich an ihm mag, ist, dass der Rat aus den Gräben kommt - er gibt zu, dass er Fehler beim Entwerfen von Teilen von Java gemacht hat, und Effective Java ist teilweise eine Art seiner "Heilung" sprechen :-)
quelle
Das Builder-Muster von Josh Bloch bietet ähnlich wie das GoF-Builder-Muster die Möglichkeit, ein unveränderliches Objekt mit vielen Standarddaten ohne lange Listen verketteter Konstruktoren zu erstellen.
Wenn Sie "den einen Konstruktor mit den erforderlichen Parametern haben, normale Getter / Setter", ist Ihr Objekt nicht mehr unveränderlich. dh. Sie können es lange nach dem Instanziieren ändern.
Wenn dies für Sie kein Problem ist, haben Sie das Builder-Muster überhaupt nicht benötigt. Wenn es sich um ein Problem handelt, ist Ihre Lösung fehlerhaft.
quelle