标签:des blog http io ar os for sp div

{《HeadFirst设计模式》之策略模式 }
{ 本单元中的类为策略类 }
{ 编译工具: Delphi7.0 }
{ E-Mail : guzh-0417@163.com }
unit uStrategy;
interface
type
{飞行接口,及其实现类 }
IFlyBehavior = Interface(IInterface)
procedure Fly;
end;
TFlyWithWings = class(TInterfacedObject, IFlyBehavior)
public
procedure Fly;
end;
TFlyNoWay = class(TInterfacedObject, IFlyBehavior)
public
procedure Fly;
end;
TFlyRocketPowered = class(TInterfacedObject, IFlyBehavior)
public
procedure Fly;
end;
{叫声接口,及其实现类}
IQuackBehavior = Interface(IInterface)
procedure Quack;
end;
TQuack = class(TInterfacedObject, IQuackBehavior)
public
procedure Quack;
end;
TMuteQuack = class(TInterfacedObject, IQuackBehavior)
public
procedure Quack;
end;
TSqueak = class(TInterfacedObject, IQuackBehavior)
public
procedure Quack;
end;
implementation
{ TFlyWithWings }
procedure TFlyWithWings.Fly;
begin
Writeln(‘I am flying!‘);
end;
{ TFlyNoWay }
procedure TFlyNoWay.Fly;
begin
Writeln(‘I can not fly!‘);
end;
{ TFlyRocketPowered }
procedure TFlyRocketPowered.Fly;
begin
Writeln(‘I am flying with a rocket!‘);
end;
{ TQuack }
procedure TQuack.Quack;
begin
Writeln(‘Quack‘);
end;
{ TMuteQuack }
procedure TMuteQuack.Quack;
begin
Writeln(‘<Silence>‘);
end;
{ TSqueak }
procedure TSqueak.Quack;
begin
Writeln(‘Squeak‘);
end;
end.

{《HeadFirst设计模式》之策略模式 }
{ 本单元中的类为策略的用户, }
{ 一般策略模式中的上下文接口已包含在用户类中。}
{ 编译工具: Delphi7.0 }
{ E-Mail : guzh-0417@163.com }
unit uDuck;
interface
uses
uStrategy;
type
{ 鸭子抽象类 }
TDuck = class(TObject)
protected
FFlyBehavior : IFlyBehavior;
FQuackBehavior: IQuackBehavior;
public
procedure Display; virtual; abstract;
procedure PerformFly;
procedure PerformQuack;
procedure Swim;
procedure SetFlyBehavior(FlyBehavior: IFlyBehavior);
procedure SetQuackBehavior(QuackBehavior: IQuackBehavior);
end;
{ 绿头鸭具体类 }
TMallardDuck = class(TDuck)
public
constructor Create;
destructor Destroy; override;
procedure Display; override;
end;
{ 模型鸭具体类 }
TModelDuck = class(TDuck)
public
constructor Create;
destructor Destroy; override;
procedure Display; override;
end;
implementation
{ TDuck }
procedure TDuck.PerformFly;
begin
FFlyBehavior.Fly;
end;
procedure TDuck.PerformQuack;
begin
FQuackBehavior.Quack;
end;
procedure TDuck.SetFlyBehavior(FlyBehavior: IFlyBehavior);
begin
FFlyBehavior := FlyBehavior;
end;
procedure TDuck.SetQuackBehavior(QuackBehavior: IQuackBehavior);
begin
FQuackBehavior := QuackBehavior;
end;
procedure TDuck.Swim;
begin
Writeln(‘All ducks float, even decoys!‘);
end;
{ TMallardDuck }
constructor TMallardDuck.Create;
begin
FQuackBehavior := TQuack.Create;
FFlyBehavior := TFlyWithWings.Create;
end;
destructor TMallardDuck.Destroy;
begin
FQuackBehavior := nil;
FFlyBehavior := nil;
inherited;
end;
procedure TMallardDuck.Display;
begin
Writeln(‘I am a real mallard duck‘);
end;
{ TModelDuck }
constructor TModelDuck.Create;
begin
FFlyBehavior := TFlyNoWay.Create;
FQuackBehavior := TQuack.Create;
end;
destructor TModelDuck.Destroy;
begin
FQuackBehavior := nil;
FFlyBehavior := nil;
inherited;
end;
procedure TModelDuck.Display;
begin
Writeln(‘I am a model duck‘);
end;
end.

{《HeadFirst设计模式》之策略模式 }
{ 客户端 }
{ 编译工具: Delphi7.0 }
{ E-Mail : guzh-0417@163.com }
program pMiniDuckSimulator;
{$APPTYPE CONSOLE}
uses
SysUtils,
uDuck in ‘uDuck.pas‘,
uStrategy in ‘uStrategy.pas‘;
var
Mallard: TDuck;
Model : TDuck;
FlyRocketPowered: IFlyBehavior;
begin
Mallard := TMallardDuck.Create;
Mallard.PerformQuack;
Mallard.PerformFly;
FreeAndNil(Mallard);
Model := TModelDuck.Create;
Model.PerformFly;
FlyRocketPowered := TFlyRocketPowered.Create;
Model.SetFlyBehavior(FlyRocketPowered);
Model.PerformFly;
FlyRocketPowered := nil;
FreeAndNil(Model);
Readln;
end.
运行结果:

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---策略模式之MiniDuckSimulator[转]
标签:des blog http io ar os for sp div
原文地址:http://www.cnblogs.com/0x2D-0x22/p/4076282.html