Builder-Muster-Validierung - Effektiv Java

In Artikel 2 der Effektive Java (2nd Edition), der Autor nennt folgende über imposante Invarianten über Parameter, die während der Verwendung Bauherren:

Ist es wichtig, dass Sie überprüft werden nach kopieren der Parameter aus dem builder-Objekt, und, dass Sie überprüft werden auf die Objekt-Felder anstelle der Baumeister Felder (Item 39). Wenn keine der Invarianten verletzt werden, die build-Methode sollte wirft eine IllegalStateException (Item 60).

Bedeutet dies, dass nach dem build-Methode hat das Ziel-Objekt übergeben werden sollen, eine Validierungs-routine für alle erforderlichen Validierungen?

Auch, könnte jemand bitte erläutern Sie die Argumentation dahinter?

  • Ich nehme an, weil der generator die Felder werden könnte, mutiert (z.B. durch einen anderen thread), nachdem Sie kopiert worden sind, auf das Objekt, was bedeutet, dass der Bauherr könnte in einem Zustand, wo es schaffen würde, eine "gültige" Objekt, während Sie vorher hätte eine "ungültig" - Objekt.
  • Tut mir Leid, aber ich bin mir nicht sicher, ob ich diese richtig verstehen. Ein generator erstellt werden, wie neue <ClassName>.Builder.setter1().setter2.().build(). Wie könnte einer einen anderen thread Verweis für diese Besondere generator-Objekt?
  • In diesem Fall, es konnte nicht. Aber es gibt nichts zu stoppen Sie eine builder-Instanz geteilt zwischen threads im Allgemeinen: es ist nur ein Bezug wie der andere.
Schreibe einen Kommentar