delphi 回调函数

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
    //定义一个对象事件方法
   TCallbackFunc = function (i: Integer): Integer of object;

   TMyCallBackObject = class
    private
     FcallBack: TCallbackFunc;
    function SetcallBack(const Value: TCallbackFunc): Integer;

    public
      function call(param: Integer): Integer;
   end;

   TA = class
     public
        function doSomeThing(i: Integer): Integer;
   end;

{TA}
function TA.doSomeThing(i: Integer): Integer;
begin
   Result := i;
end;


var
  c: TMyCallBackObject;
  I: Integer;
  t: TA;


{ TMyCallBackObject }

function TMyCallBackObject.call(param: Integer): Integer;
begin
    Result := 0;

   if Assigned(FcallBack) then
   //调用
     Result:= FcallBack(param);

end;

function TMyCallBackObject.SetcallBack(const Value: TCallbackFunc): Integer;
begin
    Self.FcallBack := Value;
end;


begin
  c := TMyCallBackObject.Create;
  t := TA.Create;

  c.SetcallBack(t.doSomeThing);
  I := c.call(9);

  write(i);
  Readln;
  c.Free;
  t.Free;

end.



回调函数

回调(CallBack)函数就是一种两个对象之间的通知方法。被通知者事先约定好发生某种情况时的处理函数,在该情况发生时发起通知者调用该处理函数以完成回调

类似观察者模式, 一个对象(发布者)内部公布一个接口(TCallBackFunc), 对它感兴趣的类(TA)(订阅者)实现的具体执行方法(doSomething)