BluePrints werden benötigt, um Widgets zu erzeugen.
Mit Hilfe eines BluePrint wird das (Default) Setup eines Widgets
festgelegt. Wenn ein Widget erzeugt wird, werden alle
Eigenschaften, welche auf dem Setup definiert sind, für das Widget
übernommen. Einige Parameter eines Setups sind Pflichtparameter.
Diese sind sind mit der @Mandatory
Annotation
gekennzeichnet. Für Pflichtparameter existieren, wenn dies
sinnvoll möglich ist, Defaultwerte, welche
beliebig überschrieben werden können. Siehe dazu auch
Widget Defaults. Die Setter
Methoden eines BluePrint haben, wie beim Builder Pattern üblich,
immer die Instanz als Rückgabewert. Dadurch lassen sich die
Methodenaufrufe einfach verketten.
Ein BluePrint kann Eigenschaften enthalten, welche für das Widget
nicht mehr veränderbar sind. Zum Beispiel muss die
Orientation
eines
SplitComposite
initial auf horizontal oder
vertikal festgelegt werden, und ist nachträglich nicht mehr
änderbar. Durch die klare Trennung der Setup und Widget
Schnittstellen lassen sich (auch für eigene Widgets) sogenannte
imutable
Member einfach umsetzen, ohne dabei lange Parameterlisten
in Konstruktoren zu benötigen. Dies kann die Implementierung eines
Widgets erleichtern, weil nicht alle Eigenschaften modifizierbar
implementiert werden müssen.
Die Frage, ob eine Eigenschaft imutable ist oder nicht ist eine Designfrage. Man könnte sich zum Beispiel auf den Standpunkt stellen, dass ein Fenster entweder closeable ist oder nicht. Diesen Zustand während der Anzeige des Fensters zu ändern wäre ungewöhnlich, daher kann man sich den Implementierungsaufwand dafür auch einsparen. Das man den Titel eines Fensters zur Laufzeit ändert, ist jedoch üblich. Beispielsweise zeigt das Explorer Fenster von Windows immer den ausgewählten Ordner im Titel an. Diese Eigenschaft sollte also eher veränderbar entworfen werden. Das Prinzip, dass Widgets unveränderbare Eigenschaften haben, findet sich auch bei SWT wieder. Dort werden diese über den Style, welcher eine Bitmaske darstellt, gesetzt.
Für die Erstellung eigener Widget Bibliotheken kann der BluePrint Mechanismus verwendet werden. Dabei müssen die BluePrint Schnittstellen nicht selbst implementiert werden, da die Implementierung von der Blue Print Proxy Factory mit Hilfe von Java Proxies umgesetzt wird. Das Definieren der BluePrint Schnittstelle reicht also aus.