Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---策略模式之MiniDuckSimulator
Posted on 2009-05-30 13:30 都市牧羊 阅读(667) 评论(0) 收藏 举报

 策略类
策略类1

2
 {《HeadFirst设计模式》之策略模式 }
{《HeadFirst设计模式》之策略模式 }3
 { 本单元中的类为策略类           }
{ 本单元中的类为策略类           }4
 { 编译工具: Delphi7.0           }
{ 编译工具: Delphi7.0           }5
 { E-Mail : guzh-0417@163.com   }
{ E-Mail : guzh-0417@163.com   }6

7
 unit uStrategy;
unit uStrategy;8

9
 interface
interface10

11
 type
type12
 {飞行接口,及其实现类 }
  {飞行接口,及其实现类 }13

14
 IFlyBehavior = Interface(IInterface)
  IFlyBehavior = Interface(IInterface)15
 procedure Fly;
    procedure Fly;16
 end;
  end;17

18
 TFlyWithWings = class(TInterfacedObject, IFlyBehavior)
  TFlyWithWings = class(TInterfacedObject, IFlyBehavior)19
 public
  public20
 procedure Fly;
    procedure Fly;21
 end;
  end;22

23
 TFlyNoWay = class(TInterfacedObject, IFlyBehavior)
  TFlyNoWay = class(TInterfacedObject, IFlyBehavior)24
 public
  public25
 procedure Fly;
    procedure Fly;26
 end;
  end;27

28
 TFlyRocketPowered = class(TInterfacedObject, IFlyBehavior)
  TFlyRocketPowered = class(TInterfacedObject, IFlyBehavior)29
 public
  public30
 procedure Fly;
    procedure Fly;31
 end;
  end;32

33
 {叫声接口,及其实现类}
  {叫声接口,及其实现类}34

35
 IQuackBehavior = Interface(IInterface)
  IQuackBehavior = Interface(IInterface)36
 procedure Quack;
    procedure Quack;37
 end;
  end;38

39
 TQuack = class(TInterfacedObject, IQuackBehavior)
  TQuack = class(TInterfacedObject, IQuackBehavior)40
 public
  public41
 procedure Quack;
    procedure Quack;42
 end;
  end;43

44
 TMuteQuack = class(TInterfacedObject, IQuackBehavior)
  TMuteQuack = class(TInterfacedObject, IQuackBehavior)45
 public
  public46
 procedure Quack;
    procedure Quack;47
 end;
  end;48

49
 TSqueak = class(TInterfacedObject, IQuackBehavior)
  TSqueak = class(TInterfacedObject, IQuackBehavior)50
 public
  public51
 procedure Quack;
    procedure Quack;52
 end;
  end;53

54
 implementation
implementation55

56
 { TFlyWithWings }
{ TFlyWithWings }57

58
 procedure TFlyWithWings.Fly;
procedure TFlyWithWings.Fly;59
 begin
begin60
 Writeln('I am flying!');
  Writeln('I am flying!');61
 end;
end;62

63
 { TFlyNoWay }
{ TFlyNoWay }64

65
 procedure TFlyNoWay.Fly;
procedure TFlyNoWay.Fly;66
 begin
begin67
 Writeln('I can not fly!');
  Writeln('I can not fly!');68
 end;
end;69

70
 { TFlyRocketPowered }
{ TFlyRocketPowered }71

72
 procedure TFlyRocketPowered.Fly;
procedure TFlyRocketPowered.Fly;73
 begin
begin74
 Writeln('I am flying with a rocket!');
  Writeln('I am flying with a rocket!');75
 end;
end;76

77
 { TQuack }
{ TQuack }78

79
 procedure TQuack.Quack;
procedure TQuack.Quack;80
 begin
begin81
 Writeln('Quack');
  Writeln('Quack');82
 end;
end;83

84
 { TMuteQuack }
{ TMuteQuack }85

86
 procedure TMuteQuack.Quack;
procedure TMuteQuack.Quack;87
 begin
begin88
 Writeln('<Silence>');
  Writeln('<Silence>');89
 end;
end;90

91
 { TSqueak }
{ TSqueak }92

93
 procedure TSqueak.Quack;
procedure TSqueak.Quack;94
 begin
begin95
 Writeln('Squeak');
  Writeln('Squeak');96
 end;
end;97

98
 end.
end.

 策略的用户
策略的用户1

2
 {《HeadFirst设计模式》之策略模式           }
{《HeadFirst设计模式》之策略模式           }3
 { 本单元中的类为策略的用户,                }
{ 本单元中的类为策略的用户,                }4
 { 一般策略模式中的上下文接口已包含在用户类中。}
{ 一般策略模式中的上下文接口已包含在用户类中。}5
 { 编译工具: Delphi7.0                     }
{ 编译工具: Delphi7.0                     }6
 { E-Mail : guzh-0417@163.com             }
{ E-Mail : guzh-0417@163.com             }7

8
 unit uDuck;
unit uDuck;9

10
 interface
interface11

12
 uses
uses13
 uStrategy;
  uStrategy;14

15
 type
type16
 { 鸭子抽象类 }
  { 鸭子抽象类 }17

18
 TDuck = class(TObject)
  TDuck = class(TObject)19
 protected
  protected20
 FFlyBehavior  : IFlyBehavior;
    FFlyBehavior  : IFlyBehavior;21
 FQuackBehavior: IQuackBehavior;
    FQuackBehavior: IQuackBehavior;22
 public
  public23
 procedure Display; virtual; abstract;
    procedure Display; virtual; abstract;24
 procedure PerformFly;
    procedure PerformFly;25
 procedure PerformQuack;
    procedure PerformQuack;26
 procedure Swim;
    procedure Swim;27
 procedure SetFlyBehavior(FlyBehavior: IFlyBehavior);
    procedure SetFlyBehavior(FlyBehavior: IFlyBehavior);28
 procedure SetQuackBehavior(QuackBehavior: IQuackBehavior);
    procedure SetQuackBehavior(QuackBehavior: IQuackBehavior);29
 end;
  end;30

31
 { 绿头鸭具体类 }
  { 绿头鸭具体类 }32

33
 TMallardDuck = class(TDuck)
  TMallardDuck = class(TDuck)34
 public
  public35
 constructor Create;
    constructor Create;36
 destructor Destroy; override;
    destructor Destroy; override;37
 procedure Display; override;
    procedure Display; override;38
 end;
  end;39

40
 { 模型鸭具体类 }
  { 模型鸭具体类 }41
 
  42
 TModelDuck = class(TDuck)
  TModelDuck = class(TDuck)43
 public
  public44
 constructor Create;
    constructor Create;45
 destructor Destroy; override;
    destructor Destroy; override;46
 procedure Display; override;
    procedure Display; override;47
 end;
  end;48

49
 implementation
implementation50

51
 { TDuck }
{ TDuck }52

53
 procedure TDuck.PerformFly;
procedure TDuck.PerformFly;54
 begin
begin55
 FFlyBehavior.Fly;
  FFlyBehavior.Fly;56
 end;
end;57

58
 procedure TDuck.PerformQuack;
procedure TDuck.PerformQuack;59
 begin
begin60
 FQuackBehavior.Quack;
  FQuackBehavior.Quack;61
 end;
end;62

63
 procedure TDuck.SetFlyBehavior(FlyBehavior: IFlyBehavior);
procedure TDuck.SetFlyBehavior(FlyBehavior: IFlyBehavior);64
 begin
begin65
 FFlyBehavior := FlyBehavior;
  FFlyBehavior := FlyBehavior;66
 end;
end;67

68
 procedure TDuck.SetQuackBehavior(QuackBehavior: IQuackBehavior);
procedure TDuck.SetQuackBehavior(QuackBehavior: IQuackBehavior);69
 begin
begin70
 FQuackBehavior := QuackBehavior;
  FQuackBehavior := QuackBehavior;71
 end;
end;72

73
 procedure TDuck.Swim;
procedure TDuck.Swim;74
 begin
begin75
 Writeln('All ducks float, even decoys!');
  Writeln('All ducks float, even decoys!');76
 end;
end;77

78
 { TMallardDuck }
{ TMallardDuck }79

80
 constructor TMallardDuck.Create;
constructor TMallardDuck.Create;81
 begin
begin82
 FQuackBehavior := TQuack.Create;
  FQuackBehavior := TQuack.Create;83
 FFlyBehavior   := TFlyWithWings.Create;
  FFlyBehavior   := TFlyWithWings.Create;84
 end;
end;85

86
 destructor TMallardDuck.Destroy;
destructor TMallardDuck.Destroy;87
 begin
begin88
 FQuackBehavior := nil;
  FQuackBehavior := nil;89
 FFlyBehavior   := nil;
  FFlyBehavior   := nil;90
 inherited;
  inherited;91
 end;
end;92

93
 procedure TMallardDuck.Display;
procedure TMallardDuck.Display;94
 begin
begin95
 Writeln('I am a real mallard duck');
  Writeln('I am a real mallard duck');96
 end;
end;97

98
 { TModelDuck }
{ TModelDuck }99

100
 constructor TModelDuck.Create;
constructor TModelDuck.Create;101
 begin
begin102
 FFlyBehavior   := TFlyNoWay.Create;
  FFlyBehavior   := TFlyNoWay.Create;103
 FQuackBehavior := TQuack.Create;
  FQuackBehavior := TQuack.Create;104
 end;
end;105

106
 destructor TModelDuck.Destroy;
destructor TModelDuck.Destroy;107
 begin
begin108
 FQuackBehavior := nil;
  FQuackBehavior := nil;109
 FFlyBehavior   := nil;
  FFlyBehavior   := nil;110
 inherited;
  inherited;111
 end;
end;112

113
 procedure TModelDuck.Display;
procedure TModelDuck.Display;114
 begin
begin115
 Writeln('I am a model duck');
  Writeln('I am a model duck');116
 end;
end;117

118
 end.
end.119
 
 

 客户端
客户端1

2
 {《HeadFirst设计模式》之策略模式 }
{《HeadFirst设计模式》之策略模式 }3
 { 客户端                       }
{ 客户端                       }4
 { 编译工具: Delphi7.0          }
{ 编译工具: Delphi7.0          }5
 { E-Mail : guzh-0417@163.com  }
{ E-Mail : guzh-0417@163.com  }6

7
 program pMiniDuckSimulator;
program pMiniDuckSimulator;8

9
 {$APPTYPE CONSOLE}
{$APPTYPE CONSOLE}10

11
 uses
uses12
 SysUtils,
  SysUtils,13
 uDuck in 'uDuck.pas',
  uDuck in 'uDuck.pas',14
 uStrategy in 'uStrategy.pas';
  uStrategy in 'uStrategy.pas';15

16
 var
var17
 Mallard: TDuck;
  Mallard: TDuck;18
 Model  : TDuck;
  Model  : TDuck;19
 FlyRocketPowered: IFlyBehavior;
  FlyRocketPowered: IFlyBehavior;20
 
  21
 begin
begin22
 Mallard := TMallardDuck.Create;
  Mallard := TMallardDuck.Create;23
 Mallard.PerformQuack;
  Mallard.PerformQuack;24
 Mallard.PerformFly;
  Mallard.PerformFly;25
 FreeAndNil(Mallard);
  FreeAndNil(Mallard);26

27
 Model := TModelDuck.Create;
  Model := TModelDuck.Create;28
 Model.PerformFly;
  Model.PerformFly;29

30
 FlyRocketPowered := TFlyRocketPowered.Create;
  FlyRocketPowered := TFlyRocketPowered.Create;31
 Model.SetFlyBehavior(FlyRocketPowered);
  Model.SetFlyBehavior(FlyRocketPowered);32
 Model.PerformFly;
  Model.PerformFly;33
 FlyRocketPowered := nil;
  FlyRocketPowered := nil;34
 FreeAndNil(Model);
  FreeAndNil(Model);35

36
 Readln;
  Readln;37
 end.
end.
运行结果:
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号