Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---装饰模式之StarBuzzCoffee[转]
2020-12-13 15:39
标签:des blog http io ar os sp div on 运行结果: Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---装饰模式之StarBuzzCoffee[转] 标签:des blog http io ar os sp div on 原文地址:http://www.cnblogs.com/0x2D-0x22/p/4076277.html![]()
1
2
{《HeadFirst设计模式》之装饰模式 }
3
{ 本单元中的类为被装饰者 }
4
{ 编译工具: Delphi7.0 }
5
{ E-Mail : guzh-0417@163.com }
6
7
unit uComponent;
8
9
interface
10
11
type
12
TBeverage = class(TObject) //抽象饮料类
13
protected
14
FDescription: String;
15
public
16
function GetDescription: String; virtual;
17
function Cost: Double; virtual; abstract;
18
end;
19
20
TEspresso = class(TBeverage) //浓咖啡饮料类
21
public
22
constructor Create;
23
function Cost: Double; override;
24
end;
25
26
THouseBlend = class(TBeverage) //具体HouseBlend饮料类
27
public
28
constructor Create;
29
function Cost: Double; override;
30
end;
31
32
TDarkRoast = class(TBeverage) //具体DarkRoast饮料类
33
public
34
constructor Create;
35
function Cost: Double; override;
36
end;
37
40
implementation
41
42
{ TBeverage }
43
44
function TBeverage.GetDescription: String;
45
begin
46
Result := FDescription;
47
end;
48
49
{ TEspresso }
50
51
function TEspresso.Cost: Double;
52
begin
53
Result := 1.99;
54
end;
55
56
constructor TEspresso.Create;
57
begin
58
FDescription := ‘Espresso‘;
59
end;
60
61
{ THouseBlend }
62
63
function THouseBlend.Cost: Double;
64
begin
65
Result := 0.89;
66
end;
67
68
constructor THouseBlend.Create;
69
begin
70
FDescription := ‘House Blend Coffee‘;
71
end;
72
73
{ TDarkRoast }
74
75
function TDarkRoast.Cost: Double;
76
begin
77
Result := 0.99;
78
end;
79
80
constructor TDarkRoast.Create;
81
begin
82
FDescription := ‘Dark Roast Coffee‘;
83
end;
84
85
end.
![]()
1
2
{《HeadFirst设计模式》之装饰模式 }
3
{ 装饰者既继承又组合被装饰者。继承 }
4
{ 在这里的意图主要是类型匹配 —— }
5
{ 与被装饰者是同一类型。 }
6
{ 编译工具: Delphi7.0 }
7
{ E-Mail : guzh-0417@163.com }
8
9
unit uDecorator;
10
11
interface
12
13
uses
14
uComponent;
15
16
type
17
TCondimentDecorator = class(TBeverage) //抽象装饰者
18
end;
19
20
TMocha = class(TCondimentDecorator) //具体装饰者:Mocha
21
private
22
FBeverage: TBeverage;
23
public
24
constructor Create(aBeverage: TBeverage);
25
function GetDescription: String; override;
26
function Cost: Double; override;
27
end;
28
29
TSoy = class(TCondimentDecorator) //具体装饰者:Soy
30
private
31
FBeverage: TBeverage;
32
public
33
constructor Create(aBeverage: TBeverage);
34
function GetDescription: String; override;
35
function Cost: Double; override;
36
end;
37
38
TWhip = class(TCondimentDecorator) //具体装饰者:Whip
39
private
40
FBeverage: TBeverage;
41
public
42
constructor Create(aBeverage: TBeverage);
43
function GetDescription: String; override;
44
function Cost: Double; override;
45
end;
46
47
implementation
48
49
{ TMocha }
50
51
function TMocha.Cost: Double;
52
begin
53
Result := FBeverage.Cost + 0.20;
54
end;
55
56
constructor TMocha.Create(aBeverage: TBeverage);
57
begin
58
FBeverage := aBeverage;
59
end;
60
61
function TMocha.GetDescription: String;
62
begin
63
Result := FBeverage.GetDescription + ‘, Mocha‘;
64
end;
65
66
{ TSoy }
67
68
function TSoy.Cost: Double;
69
begin
70
Result := FBeverage.Cost + 0.15;
71
end;
72
73
constructor TSoy.Create(aBeverage: TBeverage);
74
begin
75
FBeverage := aBeverage;
76
end;
77
78
function TSoy.GetDescription: String;
79
begin
80
Result := FBeverage.GetDescription + ‘, Soy‘;
81
end;
82
83
{ TWhip }
84
85
function TWhip.Cost: Double;
86
begin
87
Result := FBeverage.Cost + 0.10;
88
end;
89
90
constructor TWhip.Create(aBeverage: TBeverage);
91
begin
92
FBeverage := aBeverage;
93
end;
94
95
function TWhip.GetDescription: String;
96
begin
97
Result := FBeverage.GetDescription + ‘, Whip‘;
98
end;
99
100
end.
![]()
1
2
{《HeadFirst设计模式》之装饰模式 }
3
{ 客户端 }
4
{ 编译工具: Delphi7.0 }
5
{ E-Mail : guzh-0417@163.com }
6
7
program pStarBuzzCoffee;
8
9
{$APPTYPE CONSOLE}
10
11
uses
12
SysUtils,
13
uComponent in ‘uComponent.pas‘,
14
uDecorator in ‘uDecorator.pas‘;
15
16
var
17
aBeverage1: TBeverage;
18
aBeverage2: TBeverage;
19
aBeverage3: TBeverage;
20
21
begin
22
aBeverage1 := TEspresso.Create;
23
Writeln(aBeverage1.GetDescription + ‘ $‘ + FloatToStr(aBeverage1.Cost));
24
FreeAndNil(aBeverage1);
25
26
aBeverage2 := TDarkRoast.Create;
27
aBeverage2 := TWhip.Create(TMocha.Create(TMocha.Create(aBeverage2)));
28
Writeln(aBeverage2.GetDescription + ‘ $‘ + FloatToStr(aBeverage2.Cost));
29
FreeAndNil(aBeverage2);
30
31
aBeverage3 := THouseBlend.Create;
32
aBeverage3 := TSoy.Create(aBeverage3);
33
aBeverage3 := TMocha.Create(aBeverage3);
34
aBeverage3 := TWhip.Create(aBeverage3);
35
Writeln(aBeverage3.GetDescription + ‘ $‘ + FloatToStr(aBeverage3.Cost));
36
FreeAndNil(aBeverage3);
37
38
Readln;
39
end.

上一篇:1.6 CSS的层叠特性
文章标题:Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---装饰模式之StarBuzzCoffee[转]
文章链接:http://soscw.com/index.php/essay/35314.html