Pattern ed

Eine kleine Liste häufigerer Pattern beim Programmieren.

Programm-Code ist nur als minimalistische (praxisferne) Erklärungshilfe gedacht.

Struktur ed

Verhalten ed

Chain of Responsibility ed

Aktionen durch eine Liste von Objekten reichen, bis sich jemand "verantwortlich" fühlt

class PossiblyResponsible
    PossiblyResponsible* next
    void doSomething()
        if wanna_do_it
            ....
        else if next
            next.doSomething()

Vorteile
hat sich für GUI/View-Bäume bewährt (welcher Teil des Programms soll einen Mausklick abarbeiten)

Command ed

Operationen in Objekten kapseln

class Data
    void execute(Command *c)

class Command
    virtual void do(Data *d)
    virtual void undo(Data *d)

Man kann damit sehr leicht undo/redo Listen bauen.

Observer ed

Nachrichten an alle "interessierten" Objekte verschicken

class Observer
    virtual void onUpdate()

class Observable
    Observer*[] observers
    void subscribe(Observer *o)
        observers.add(o)
    void notify()
        for o in observers
            o.onUpdate()

(in der Praxis ist es angenehm, onUpdate() mit Quelle und einer Nachricht zu versorgen)

Vorteile
vereinfacht Abhängigkeiten
weniger Fehler durch vergessene (oder überflüssige) Update-Operationen

Probleme
Rekursion (A -> B, B -> A)
Nachrichten sollten gruppiert werden, um erst am Ende einer langen Liste von Aktionen ein Update auszuführen

Categories: Programmieren