classfunction TfrmMemoize.SlowIncrement(ANum: integer): integer; //先是定义了一个需要缓存结果的函数 begin
Sleep(1000); //假设这个函数需要花费大量的时间,比如从网络上获取数据之类的,这里用等待一秒来模拟。
Result := ANum + 1; end;
procedure TfrmMemoize.FormCreate(Sender: TObject); begin
FMemoizedFunc := TMemoize.Memoize<integer,integer>(SlowIncrement); //这句执行后,FMemoizedFunc就好象是指代了SlowIncrement函数,对FMemoizedFunc的调用,也就是对SlowIncrement的调用,但是它缓存了函数的结果。 end;
//第一次点button1时,会等待一秒才出结果,而第二次点,则立即出现了 procedure TfrmMemoize.Button1Click(Sender: TObject); var
Input: integer; begin if TryStrToInt(edtInput.Text, Input) then
edtOutput.Text := IntToStr(FMemoizedFunc(Input)); //如果showIncrement函数曾经用input参数计算过,就直接取回它的值,否则就进行实际的函数调用。 end;