MVC durch Polling
Das MVC-Konzept verlangt, dass die Modell-Klassen die GUI-Klassen (view/controller) nicht kennen. Nichtsdestotrotz soll eine Änderung im Modell sich auf die Views auswirken. Die einfachste Art, das zu bewirken, ist das regelmäßige Abfragen (
Polling) des Modells durch die Views. Dadurch, dass sich das Modell nicht selbstständig meldet, kann natürlich eine Änderung unentdeckt bleiben.

In dem kleinen Demo-Projekt wird das Zahl-Objekt a nach dem "Bauplan" (Klasse) 
TZahl im 
Modell (in der Unit uModel) durch einen 
Controller (bestehend aus der Edit-Komponente e_ein und dem Button b_setze) beschrieben. Nach dem Beschreiben ist eventuell eine Änderung eingetreten, so dass der Inhalt des Objekts ausgelesen wird und in einem 
View (bestehend aus dem Label l_aus) angezeigt wird.
Zur Benutzung des Objekts a sind die Schritte
  - Einbindung der Unit uModel (damit die Klasse TZahl verfügbar wird)
 
  - Deklaration einer Referenz-Variablen (hier a : TZahl)
 
  - Aufruf des Konstruktors (Klassenmethode, reserviert und initialisiert Speicher,
      stellt Zeiger auf das Objekt zur Verfügung, hier: Zeiger in a)
 
  - Nutzung des Objekts durch Botschaften (SetZahl, GetZahl,...)
 
  - Aufruf des Destruktors (Objektmethode, reservierter Speicherplatz wird
      freigegeben)
 
erforderlich.
Bitte beachten, wie in der Unit uGUI die Referenz-Variablen GUI und in TGUI a deklariert werden, GUI automatisch durch das Delphi-System, a von Hand. Für GUI (und für die Unterobjekte e_ein, b_setze, l_aus usw.) wird anscheinend automatisch Konstruktor und Destruktor aufgefrufen, für a muss das von Hand gemacht werden.
Es folgt der Delphi-Quelltext der beiden Units:
unit uModel; { MVC durch Polling, mk }
interface
type
  TZahl = class(TObject)
          private
            Fz : integer;
          public
            procedure setZahl(x : integer);
            function getZahl : integer;
          end;
implementation
  procedure TZahl.setZahl(x : integer);
  begin
    Fz := x;
  end;
  function TZahl.GetZahl : integer;
  begin
    result := Fz;
  end;
end.
unit uMvc1; { MVC durch Polling, mk }
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, uModel;              { 1. Einbindung der Model-Unit           }
type
  TGUI = class(TForm)
    e_ein: TEdit; l_controller: TLabel; b_setze: TButton;
    l_view1: TLabel; l_aus: TLabel;
    procedure b_setzeClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
     a : TZahl;                   { 2. Deklaration der Referenz-Variablen  }
  end;
var
  GUI : TGUI;
implementation
{$R *.DFM}
procedure TGUI.FormCreate(Sender: TObject);
begin
  a := TZahl.Create;             { 3. Erzeugung des Model-Objekts         }
end;
procedure TGUI.b_setzeClick(Sender: TObject);
var
  z : integer;
begin
  z := StrToInt(e_ein.text);
  a.SetZahl(z);                  { 4. Schreibzugriff auf Objekt           }
  z := a.getZahl;                { 5. Lesezugriff auf Objekt, Polling     }
  l_aus.caption := IntToStr(z);  { 6. Aktualisieren des Views             }
end;
procedure TGUI.FormDestroy(Sender: TObject);
begin
  a.Free;                        { 7. Freigeben des belegten Speichers    }
end;
initialization
  // a := TZahl.Create;          { Alternative für Objekterzeugung        }
end.