WalkIntf.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:4k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit WalkIntf;
  2. interface
  3. type
  4.   IWalker = interface
  5.     ['{0876F200-AAD3-11D2-8551-CCA30C584521}']
  6.     function Walk: string;
  7.     function Run: string;
  8.     procedure SetPos (Value: Integer);
  9.     function GetPos: Integer;
  10.     property Position: Integer
  11.       read GetPos write SetPos;
  12.   end;
  13.   IJumper = interface
  14.     ['{0876F201-AAD3-11D2-8551-CCA30C584521}']
  15.     function Jump: string;
  16.     function Walk: string;
  17.     procedure SetPos (Value: Integer);
  18.     function GetPos: Integer;
  19.     property Position: Integer
  20.       read GetPos write SetPos;
  21.   end;
  22.   TJumperImpl = class (TAggregatedObject, IJumper)
  23.   private
  24.     Pos: Integer;
  25.   public
  26.     function Jump: string;
  27.     function Walk: string;
  28.     procedure SetPos (Value: Integer);
  29.     function GetPos: Integer;
  30.     property Position: Integer
  31.       read GetPos write SetPos;
  32.   end;
  33.   TRunner = class (TInterfacedObject, IWalker)
  34.   private
  35.     Pos: Integer;
  36.   public
  37.     function Walk: string;
  38.     function Run: string;
  39.     procedure SetPos (Value: Integer);
  40.     function GetPos: Integer;
  41.     destructor Destroy; override;
  42.   end;
  43.   TMyJumper = class (TInterfacedObject, IJumper)
  44.   private
  45.     fJumpImpl: TJumperImpl;
  46.   public
  47.     constructor Create;
  48.     property Jumper: TJumperImpl
  49.       read fJumpImpl implements IJumper;
  50.     destructor Destroy; override;
  51.   end;
  52.   TAthlete = class (TInterfacedObject, IWalker, IJumper)
  53.   private
  54.     fJumpImpl: TJumperImpl;
  55.   public
  56.     constructor Create;
  57.     destructor Destroy; override;
  58.     function Run: string; virtual;
  59.     function Walk1: string; virtual;
  60.     function IWalker.Walk = Walk1;
  61.     procedure SetPos (Value: Integer);
  62.     function GetPos: Integer;
  63.     property Jumper: TJumperImpl
  64.       read fJumpImpl implements IJumper;
  65.   end;
  66. implementation
  67. uses
  68.   Dialogs, Windows, SysUtils;
  69. { TJumperImpl }
  70. function TJumperImpl.Walk;
  71. begin
  72.   Inc (Pos);
  73.   Result := IntToStr (Pos) + ': Walk';
  74. end;
  75. function TJumperImpl.Jump;
  76. begin
  77.   Inc (Pos, 3);
  78.   Result := IntToStr (Pos) + ': Jump';
  79. end;
  80. function TJumperImpl.GetPos: Integer;
  81. begin
  82.   Result := Pos;
  83. end;
  84. procedure TJumperImpl.SetPos(Value: Integer);
  85. begin
  86.   Pos := Value;
  87. end;
  88. { TAthlete }
  89. constructor TAthlete.Create;
  90. begin
  91.   fJumpImpl := TJumperImpl.Create (self);
  92. end;
  93. destructor TAthlete.Destroy;
  94. begin
  95.   inherited;
  96.   fJumpImpl.Free;
  97.   MessageBox (0, 'TAthlete object destroyed', 'IntfDemo', MB_OK);
  98. end;
  99. function TAthlete.GetPos: Integer;
  100. begin
  101.   Result := fJumpImpl.Position;
  102. end;
  103. function TAthlete.Run;
  104. begin
  105.   fJumpImpl.Position := fJumpImpl.Position + 2;
  106.   Result := IntToStr (fJumpImpl.Position) + ': Run';
  107. end;
  108. procedure TAthlete.SetPos(Value: Integer);
  109. begin
  110.   fJumpImpl.Position := Value;
  111. end;
  112. function TAthlete.Walk1;
  113. begin
  114.   fJumpImpl.Position := fJumpImpl.Position + 1;
  115.   Result := IntToStr (fJumpImpl.Position) + ': Walk';
  116. end;
  117. { TRunner }
  118. destructor TRunner.Destroy;
  119. begin
  120.   inherited;
  121.   MessageBox (0, 'TRunner object destroyed', 'IntfDemo', MB_OK);
  122. end;
  123. function TRunner.GetPos: Integer;
  124. begin
  125.   Result := Pos;
  126. end;
  127. function TRunner.Run;
  128. begin
  129.   Inc (Pos, 2);
  130.   Result := IntToStr (Pos) + ': Run';
  131. end;
  132. procedure TRunner.SetPos(Value: Integer);
  133. begin
  134.   Pos := Value;
  135. end;
  136. function TRunner.Walk;
  137. begin
  138.   Inc (Pos);
  139.   Result := IntToStr (Pos) + ': Walk';
  140. end;
  141. { TMyJumper }
  142. constructor TMyJumper.Create;
  143. begin
  144.   fJumpImpl := TJumperImpl.Create (self);
  145. end;
  146. destructor TMyJumper.Destroy;
  147. begin
  148.   inherited;
  149.   fJumpImpl.Free;
  150.   MessageBox (0, 'TMyJumper object destroyed', 'IntfDemo', MB_OK);
  151. end;
  152. end.