Rémy Schumm blog ingénieur

Decorator Pattern (vereinfacht) für TextBox

publiziert am 16. 03. 2012 um 11:33

Dieser Beitrag wurde aus dem alten Blog importiert. (Link zum Orginal in Blogger)

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.





zurück zum Seitenanfang