Pattern ed

Eine kleine Liste häufigerer Pattern beim Programmieren.

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

Struktur ed

Flyweight ed

Daten mehrere Objekte teilen um Speicher zu sparen

class Internal
    // ...

class Flyweight
    Internal* internal

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