unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ComCtrls;

type

//定义接口如果接口独立成一个文件,则在应用程序中和实现程序中都要引用该接口文件;
ICar = interface //(IInterface)
// ['{ED52E264-6683-11D7-B847-001060806215}']
procedure drive;
end;

//接口实现类1,一定要加入TinterfacedObject才能使用;
TCar = class(TInterfacedObject,ICar)
public
procedure drive;
end;
//接口实现类2,一定要加入TinterfacedObject才能使用;
THouseCar = class(TInterfacedObject,ICar)
public
procedure drive;
end;

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function getCar:ICar; //此处可用别的方式来实现获取ICAR,如放在DLL文件中;
end;

 

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

{ TCar }
procedure TCar.drive;
begin
ShowMessage('TCar.drive');
end;

{ THouseCar }
procedure THouseCar.drive;
begin
ShowMessage('THouseCar.drive');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s:ICar;
begin
s:= getCar;
s.drive;
end;

function TForm1.getCar:ICar;
begin
Result:=THouseCar.Create; //此处为整个实现的关键点;
//或Result:=TCar.Create;
end;


end.

posted on 2017-05-27 15:11  siegel  阅读(913)  评论(0编辑  收藏  举报