Realisierung eines listeners



  • Moin!

    ich schreibe gerade an einem eigenen kleinen editor. Im moment steckt noch alles in der startschuhen. Ich habe mir bereits eine klasse überlegt in der ich das Dokument lagere. Nun habe ich mir überlegt das ich zur darstellung in meiner editor komponente veränderungen im dokument überwachen muss. Vor allem für das syntaxhighlighting und das falten von blöcken. Ich dachte mir das ich für diese überwachung das Listener-Pattern von Java übernehme in dem sich die horchenden/überwachenden klassen anmelden und dann benachrichtigt werden wenn etwas passiert. Nun habe ich aber ein kleine frage zur realisierung.

    Soll ich mir einen hochspezielisieren listener schreiben der speziell auf meine dokument klasse angepasst ist und für jedes ereignis eine eigene funktion bereitstellt, welche dann aufgerufen wird. Oder soll ich lieber versuchen das ganze allgemeiner zu lösen und nur eine einzige notify-methode zu schreiben die als argument ein ereignis objekt erhält welches alle relevanten daten zumereignis enthält? Von dieser ereignis klasse kann ich dan je nach ereignis belibig ableiten. Was empfehlt ihr mir? Oder habt ihr noch bessere vorschläge zur überwachung des dukuments.

    Gruß, Prophet



  • Hallo,

    Guck dir doch mal die Sources von anderen Texteditoren an und bilde dir eine Meinung.

    Vim: ftp://ftp.vim.org/

    MFG



  • Spezialisiere es, beide Seiten die das listener Pattern benutzen sind ebenfalls spezialisiert. Durch das allgemeine Design würdest du das konkrete Ereignis in ein verallgemeinertes Ereignis umwandeln und danach wieder in ein konkretes Ereignis zurückwandeln.
    Mach es wie die GUI-Frameworks und benutze spezialisierte Events wie onMouseMove onResize onKeyPress ...



  • besser für jedes ereignis eigene funktion zu schreiben.
    Ansonsten hast du eine riesige Funktion mit paar tausend if-Abzweigungen. Und das für jeden Listener.
    So als Worst-Case Fall.



  • Gut dann werde ich die spezialisiert variante verwenden. Vielen dank!



  • Benutze bitte dafür http://www.boost.org/doc/html/signals.html oder http://libsigc.sourceforge.net/. Die sind für sowas da. Da braucht man nicht nochmal das Rad neu erfinden.


Anmelden zum Antworten