This is the version 5bb8b4b408367b37baaa5bd1 from 2015-06-07 13:24:51 comment: 'ChainOfCommand, Command, Observer'
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