@stahli, würde es so machen:
Delphi-Quellcode:
type
TVisitorAddiere = class (TInterfacedObject, IVisitor)
private
FValue: Integer;
public
constructor Create(AValue: Integer);
procedure Visit(const x: TClass1); overload;
procedure Visit(const x: TClass2); overload;
end;
//...
constructor TVisitorAddiere.Create(AValue: Integer);
begin
FValue := AValue;
end;
procedure TVisitorAddiere.Visit(const x: TClass1);
begin
x.Wert := x.Wert + FValue;
end;
procedure TVisitorAddiere.Visit(const x: TClass2);
begin
x.Wert := x.Wert + FValue;
end;
Beispielaufruf:
Delphi-Quellcode:
var
VisitorAddiere: TVisitorAddiere;
begin
VisitorAddiere := TVisitorAddiere.Create(100); // wenn man 102 addieren will muss man eben neuen VisitorAddiere erstellen mit Parameter 102
Class1.TuWasBesonderes(VisitorAddiere);
VisitorAddiere.Free;
end;