Das Decorator Pattern

  • Moin,


    wie in einem anderen Thread (Konzept gesucht: Elternklasse erweitern) angedeutet habe ich ein bisschen mit dem Decorator Pattern gespielt.


    Der Ansatz war es, ein bestimmtes Objekt zu erweitern ohne es subclassen zu müssen.
    Im Endeffekt stelle ich fest, dass es vermutlich sinnvoller gewesen wäre, den Decorator gegen eine abstrakte Klasse oder ein Interface zu erstellen. Schließlich werde ich nur eine android.location.Location bekommen. Nichts desto trotz hoffe ich, dass der Ansatz klar wird.


    Er besteht aus zwei Komponenten: dem Interface des Decorators und einer konkreten Implementierung.


    Java
    // LocationStringDecorator.java
    public interface LocationStringDecorator {
        public String locationString();
    
    
        public double getLatitude();
        public double getLongitude();
    }



    Das Einsatzgebiet sieht wie folgt aus: (Unit Tests scheinen unter Android Studio 0.3.6 defekt, deshalb via Activity)


    Zitat

    Output
    11-29 12:48:24.768 E/INFO﹕ N52° 7' 30"; E13° 45' 57"
    11-29 12:48:24.768 E/INFO﹕ Degree 110.0 is invalid!; Degree -911.0 is invalid!

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

    Einmal editiert, zuletzt von Marco Feltmann ()

  • Was bringt uns das jetzt?
    Nun, man könnte einen weiteren Decorator erstellen:



    Wenn wir das jetzt noch benutzen, dann kommt das Folgende bei rum:

    Zitat

    11-29 13:10:56.718 E/INFO﹕ N53° 32' 59"; W9° 58' 59"
    11-29 13:10:56.718 E/INFO﹕ Looks like you are located in Hamburg.
    11-29 13:10:56.718 E/INFO﹕ Degree 110.0 is invalid!; Degree -911.0 is invalid!
    11-29 13:10:56.718 E/INFO﹕ Seems you are outside Hamburg.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

    Einmal editiert, zuletzt von Marco Feltmann ()

  • Und nun kommen wir zum Oberhammer: Dekorierte Dekorierer. :)


    Wir erinnern uns, folgender Code gab folgende Ausgabe:


    Zitat

    11-29 13:19:32.928 1254-1254/de.tagnewmedia.locationconverter.locationconverter E/INFO﹕ N53° 32' 59"; W9° 58' 59"
    11-29 13:19:32.928 1254-1254/de.tagnewmedia.locationconverter.locationconverter E/INFO﹕ Looks like you are located in Hamburg.
    11-29 13:19:32.928 1254-1254/de.tagnewmedia.locationconverter.locationconverter E/INFO﹕ Degree 110.0 is invalid!; Degree -911.0 is invalid!
    11-29 13:19:32.928 1254-1254/de.tagnewmedia.locationconverter.locationconverter E/INFO﹕ Seems you are outside Hamburg.


    Nun ändern wir aber einmal den Code:


    Wir übergeben jetzt keine Location mehr, sondern einen Decorator.
    Und die Ausgabe?

    Zitat

    11-29 13:25:17.588 E/INFO﹕ N53° 32' 59"; W9° 58' 59"
    Looks like you are located in Hamburg.
    11-29 13:25:17.588 1E/INFO﹕ Degree 110.0 is invalid!; Degree -911.0 is invalid!
    Seems you are outside Hamburg.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!