Design Patterns

Die JavaBeans-Architektur spezifiziert standardisierte Namenskonventionen, die, basierend auf der jeweiligen Funktion, zur Definition von Bean-Methoden verwendet werden. Die Verwendung dieser Namenskonventionen hat ferner den Vorteil, dass kein Zusatzaufwand zur Unterstützung des Introspektionskonzepts erforderlich ist. Namenskonventionen beziehen sich sowohl auf Eigenschaften, Events als auch auf Methoden.

Eigenschaftsmuster (Property Design Patterns)

Durch Eigenschaftsmuster werden die als public deklarierten Eigenschaften eines Beans festgelegt. Eigenschaftsmuster hängen eng mit Zugriffsmethoden zusammen. Anhand der Zugriffsmethoden (Setter- und Getter-Methoden) stellt die automatische Introspektion fest, welche Eigenschaften ein Bean offenlegt. Für jede als public deklarierte Lese- oder Schreibmethode wird unterstellt, dass die betroffene Eigenschaft als public deklariert ist.

Eigenschaften müssen nicht immer die entsprechende Lese- und Schreibmethode beinhalten. Verfügt eine Eigenschaft nur über die Lesemethode, so wird daraus geschlossen, dass es sich hierbei um eine ausschließlich leseberechtigte Eigenschaft (Read-Only Property) handelt. Existiert andererseits nur eine Schreibmethode, so wird unterstellt, dass es sich um eine ausschließlich schreibberechtigte Eigenschaft (Write-Only Property) handelt. Eine Lese-Schreib-Eigenschaft (Read-Write Property) ist dadurch gekennzeichnet, dass sie sowohl das Lesen als auch das Schreiben ermöglichen. Die Eigenschaftsmuster variieren je nach Eigenschaftsart. In JavaBeans existieren folgende Eigenschaftsmuster:

  • Einfache Eigenschaften
    Zu den einfachen Eigenschaften gehören alle Typen sowie Klassen und Schnittstellen der Sprache Java. Eigenschaften des Typs
    int, long, float, Color, Font, oder boolean sind Beispiele für einfache Eigenschaften. Nachfolgend sind die Muster für Zugriffsmethoden einfacher Eigenschaften dargestellt:

syntax 

public <propertyType> getTheProperty();
public void setTheProperty( <propertyType> derWert);

Für die Eigenschaft anzahlDerSchiffe vom Typ int werden dementsprechend folgende Zugriffsmethoden definiert:

syntax 

// Getter-Methode
public int getAnzahlDerSchiffe() {return anzahlDerSchiffe;}

// Setter-Methode
public void setAnzahlDerSchiffe(int n){anzahlDerSchiffe = n;}

    Wenn die automatische Introspektion von JavaBeans auf eine derartige Methodendefinition stößt, so lokalisiert sie sowohl die Eigenschaft anzahlDerSchiffe, als auch die Zugriffsmethoden getAnzahlDerSchiffe() und setAnzahlDerSchiffe(), die den Wert dieser Eigenschaft lesen bzw. setzen.

  • Boole'sche Eigenschaften
    Obwohl boole'sche Eigenschaften aus technischer Sicht einfache Eigenschaften sind, beinhalten sie ein optionales Muster für Lesemethoden, mit dem angezeigt werden kann, dass die Eigenschaft vom Typ
    boolean ist. Das Muster lautet:

syntax 

public boolean isTheProperty();


    Der Unterschied zwischen diesem Muster und dem Muster einfacher Eigenschaften besteht darin, dass im Namen derartiger Eigenschaften das wort is anstelle des Worts get vorkommt. Existiert sowohl eine get-Methode als auch eine is-Methode für eine Eigenschaft, so verwendet die Introspektion die is-Methode.

  • Indizierte Eigenschaften
    Eine indizierte Eigenschaft besteht aus einem Array mit einfachen Eigenschaften. Nachfolgend sind die Muster für die Lese- bzw. Schreibmethoden einzelner Elemente einer indizierten Eigenschaft aufgeführt:

syntax 

public <PropertyElement> getTheProperty(int i);
public void setPropertyName( int i , <PropertyElement>x);

Die Zugriffsmethoden zum Lesen und Schreiben des Eigenschaften-Arrays als Ganzes sind:

syntax 

public <PropertyElement>[] getTheProperty();
public void setPropertyName(<PropertyElement>[] x);

Das folgende Beispiel verdeutlicht die Verwendung dieser Syntax.

syntax 

// Lesen bzw. Schreiben der Eigenschaft des i-ten Elements
public Color getTheColorPalette(int i);
public void setTheColorPalette( int i , Color red);

// Lesen bzw. Schreiben der Eigenschaften des gesammten Arrays
public Color[] getTheColorPalette();
public void setTheColorPalette(Color[] c);

Event-Muster

Ändert sich der interne Zustand eines Beans, so ist es nötig, extern registrierte Komponenten über dieses Ereignis zu informieren. Beans können Nachrichten versenden, die andere Beans oder sonstige Komponenten über Änderungen benachrichtigen. Die Ereignisse (Events) werden an registrierte Event-Listener gesendet. Diese müssen ihre Anmeldung bzw. Abmeldung beim jeweiligen Bean selbst vornehmen.

Zur Registrierung bietet die Beans-Technologie geeignete Methoden an, die zur Anmeldung und zur Abmeldung jeweils paarweise vorliegen. Ein Methodenpaar ist hierbei zur Registrierung einer Komponente ausreichend. Aus diesem Grund verwendet die Introspektion von JavaBeans diese Methoden auch dazu, um herauszufinden, welche Events ein Bean senden kann. Da zwei Arten von Events existieren, Unicast-Events und Multicast-Events (Kap. 9.3), sind entsprechend zwei Arten von Event-Mustern vorhanden:

  • Unicast-Event-Sources
    Unicast-Event-Sources sind Beans, die zu jedem Zeitpunkt nur ein
    EventListener-Objekt für Ereignisbenachrichtigungen zulassen. Wird der Versuch unternommen, ein weiteres EventListener-Objekt bei einem Unicast-Bean anzumelden, so wird die Exception TooManyListenerException ausgelöst. Das Muster für die Registrierung von Unicast-Event-Sources lautet wie folgt:

syntax 

public void add<EventListenerType> (<EventListenerTyp> e) throws TooManyListeners;

public void remove<EventListenerType> (<EventListenerTyp> e);

  • Multicast-Events
    Multicast-Events werden benötigt, wenn die Registrierung von mehr als einem
    EventListener-Objekt zulässig ist. Multicast-Events verwenden die folgende Syntax:

syntax 

public void add<EventListenerType> (<EventListenerTyp> e);
public void remove<EventListenerType> (<EventListenerTyp> e);

Methodenmuster

Man kann auf jede JavaBeans-Methode zugreifen, wenn diese als public deklariert ist. Derartige Methoden haben allerdings weitreichendere Funktionen als bspw. nur das Lesen oder Schreiben einer Eigenschaft. Da die Namensgebung für die als public deklarierten Methoden den Beans-Entwicklern überlassen ist, gibt es keine spezifischen Methodenmuster. Als public deklarierte Methoden zeigen im Gegensatz zu den als public deklarierten Zugriffsmethoden der JavaBeans-Introspektion keine Eigenschaften von Beans an.


SPNavRight SPNavRight SPNavRight
BuiltByNOF