示例:内部迭代器(使用函数指针) 说明: 通过给迭代器传递一个函数指针(全局的或静态的)来实现内部迭代器。 代码: unit uListTraverser1; interface uses uList,uListIterator; type TProcessItem = function(AItem: TObject): Boolean; TListTraverser1 = class private FIterator: TListIterator; FOnProcessItem: TProcessItem; public constructor Create(AList: TList1); destructor Destroy; override; //--- function Traverse(): Boolean; //--- property OnProcessItem: TProcessItem read FOnProcessItem write FOnProcessItem; end; function PrintEmployee(AItem: TObject): Boolean; implementation uses uEmployee; function PrintEmployee(AItem: TObject): Boolean; begin TEmployee(AItem).Print; Result := true; end; constructor TListTraverser1.Create(AList: TList1); begin FIterator := TListIterator.Create(AList); end; destructor TListTraverser1.Destroy; begin FIterator.Free; //--- inherited; end; function TListTraverser1.Traverse: Boolean; begin Result := false; //--- if Assigned(FOnProcessItem) then begin with FIterator do begin First; while not IsDone do begin Result := FOnProcessItem(CurrentItem); if not Result then Break; //--- Next; end; end; end; end; end. procedure TForm1.Button7Click(Sender: TObject); var AEmployees: TList1; AIterator: TListTraverser1; begin self.Memo1.Clear; //--- AEmployees := TList1.Create; try with AEmployees do begin Add(TEmployee.Create('1',self.Memo1)); Add(TEmployee.Create('2',self.Memo1)); Add(TEmployee.Create('3',self.Memo1)); end; //--- AIterator := TListTraverser1.Create(AEmployees); try AIterator.OnProcessItem := PrintEmployee; AIterator.Traverse; finally AIterator.Free; end; finally AEmployees.Free; end; end;
