Model View Controller Pattern

Das Model View Controller Pattern (siehe Design Pattern) wird zur Strukturierung des Codes für graphische Benutzeroberflächen verwendet. Es wurde 1979 von Trygve Reenskaug entwickelt.

Das Pattern teilt die beteiligten Klassen in drei Kategorien ein:

Model - repräsentiert die darzustellenden Daten,
View - zeigt die Daten an,
Controller - verarbeitet Nutzerinteraktionen.

Typischerweise besitzt das Model einen Mechanismus, mit dem sich interessierte Objekte über Änderungen an den Daten benachrichtigen lassen können. Dieser Mechanismus wird vom View genutzt. Sobald sich das Model ändert, wird die Darstellung des Views aktualisiert. Der Controller registriert sich für den Empfang von Nutzerinteraktionen am View und manipuliert als Reaktion darauf das Model. Es kann sein, dass der Controller dafür auf den View zugreifen muss. Ebenso kann es sein, dass der Controller Aspekte des Views ändert, die nicht durch das Model beschrieben werden.

public interface ModelChangeListener
{
  void modelChanged(ModelChangeEvent event);
}

public class Model
{
  void addChangeListener(ModelChangeListener listener) { ... }
  //
  void update(...) { ... }
}

public class View extends ... implements ModelChangeListener
{
  private final Model model;
  //
  public View(Model model)
  {
    this.model = model;
  }
  //
  public void connect()
  {
    model.addChangeListener(this);
  }
  //
  public void modelChanged(ModelChangeEvent event)
  {
    repaint(); // Darstellung aktualisieren
  }
  //
  public void paint(Graphics graphics)
  {
     ... model ... // Model darstellen
  }
}

public class Controller implements ...Listener
{
  private final Model model;
  private final View view;
  //
  public Controller(Model model, View view)
  {
    this.model = model;
    this.view = view;
  }
  //
  public void connect()
  {
    view.add...Listener(this);
  }
  //
  public void ...(...Event event)
  {
    ... model.update(...) ... // Model ändern
  }
}

Model model = new Model();
View view = new View(model);
Controller controller = new Controller(model, view);
view.connect();
controller.connect();

Link

http://de.wikipedia.org/wiki/Model_View_Controller


Anlage

Abhängigkeiten zwischen Model, View und Controller

mvc.pptx