Decorator Pattern (vereinfacht) für TextBox
publiziert am 16. 03. 2012 um 11:33
Einer GWT-TextBox sollen verschiedene Eigenschaften hinzugefügt werden, z.B. "Man darf nur Zahlen eingeben" oder ähnliches. Dazu eignet sich das Decorator-Pattern, das die TextBox um die benötigten Dinge erweitert, sprich: dekoriert.
Da in unserem Framework die TextBox eh einen Wrapper hat, kann dem TextBoxWrapper eine beliebige Anzahl Dokoratoren mitgegeben werden:
publicSuggestBoxWrapper(AbstractView view, String id, SuggestOracle oracle, TextBoxDecorator... decorators) {
this(view, id, oracle);
for (TextBoxDecorator textBoxDecorator : decorators) {
textBoxDecorator.attachToWidget(getWidget().getTextBox());
}
}
Die Dekoratoren kennen ihren Decoree und registrieren sich bei ihm als KeyPressHandler:
public abstract class TextBoxDecorator implements KeyPressHandler {
private static final int CH_SPACE = ' ';
/**
* Verbindet diesen Decorator mit der TextBox.
*
* @param textBox -- die zum Dekorierer gehörende Textbox.
*/
public voidattachToWidget(TextBoxBase textBox) {
textBox.addKeyPressHandler(this);
}
Der Dekorator empfängt dann die Events der Textbox und kann dementprechend handeln:
@Override
public voidonKeyPress(KeyPressEvent event) {
char ch = event.getCharCode();
if (!(Character.isLetterOrDigit(ch) || isControlCode(ch))) {
event.preventDefault();
}
}
Da der Dekorator seinen Decoree (die TextBox) kennt, könnte man natürlich auch den Text beliebig verändern und so komplexe Formatiere implementieren.