1![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
{《HeadFirst设计模式》之命令模式 }
3
{ 本单元中的类为命令的接收者 }
4
{ 编译工具 :Delphi7.0 }
5
{ 联系方式 :guzh-0417@163.com }
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
unit uReceiveObject;
8![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
interface
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
type
12
TLight = class(TObject)
13
private
14
FLocation: String;
15
public
16
constructor Create(aLocation: String);
17
procedure Open;
18
procedure Off;
19
end;
20![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
TCeilingFan = class(TObject)
22
private
23
FLevel : Integer;
24
FLocation: String;
25
function GetSpeed: Integer;
26
public
27
constructor Create(aLocation: String);
28
procedure High;
29
procedure Medium;
30
procedure Low;
31
procedure Off;
32
property Speed: Integer read GetSpeed;
33
end;
34![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
35
TGarageDoor = class(TObject)
36
private
37
FLocation: String;
38
public
39
constructor Create(aLocation: String);
40
procedure Up;
41
procedure Down;
42
procedure Stop;
43
procedure LightOn;
44
procedure LightOff;
45
end;
46![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
TStereo = class(TObject)
48
private
49
FLocation: String;
50
public
51
constructor Create(aLocation: String);
52
procedure Play;
53
procedure Off;
54
procedure SetCD;
55
procedure SetDVD;
56
procedure SetRadio;
57
procedure SetVolume(aVolume: Integer);
58
end;
59![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
60
TTV = class(TObject)
61
private
62
FLocation: String;
63
FChannel : Integer;
64
public
65
constructor Create(aLocation: String);
66
procedure Open;
67
procedure Off;
68
procedure SetInputChannel;
69
end;
70![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
71
THottub = class(TObject)
72
private
73
FOpen: Boolean;
74
FTemp: Integer;
75
function GetTemp: Integer;
76
procedure SetTemp(const Value: Integer);
77
public
78
function Open: Boolean;
79
function Off : Boolean;
80
procedure BubblesOpen;
81
procedure BubblesOff;
82
procedure JetsOpen;
83
procedure JetsOff;
84
procedure Heat;
85
procedure Cool;
86
property Temp: Integer read GetTemp write SetTemp;
87
end;
88
89
implementation
90![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
91
const
92
SPEED_HIGH = 2;
93
SPEED_MEDIUM = 1;
94
SPEED_LOW = 0;
95![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
96
{ TLight }
97![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
98
constructor TLight.Create(aLocation: String);
99
begin
100
FLocation := aLocation;
101
end;
102![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
103
procedure TLight.Off;
104
begin
105
Writeln(FLocation + 'Light is off.');
106
end;
107![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
108
procedure TLight.Open;
109
begin
110
Writeln(FLocation + 'Light is on.');
111
end;
112![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
113
{ TCeilingFan }
114![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
115
constructor TCeilingFan.Create(aLocation: String);
116
begin
117
FLocation := aLocation;
118
end;
119![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
120
function TCeilingFan.GetSpeed: Integer;
121
begin
122
Result := FLevel;
123
end;
124![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
125
procedure TCeilingFan.High;
126
begin
127
FLevel := SPEED_HIGH;
128
Writeln(FLocation + 'Ceiling fan is on high.');
129
end;
130![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
131
procedure TCeilingFan.Low;
132
begin
133
FLevel := SPEED_LOW;
134
Writeln(FLocation + 'Ceiling fan is on low.');
135
end;
136![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
137
procedure TCeilingFan.Medium;
138
begin
139
FLevel := SPEED_MEDIUM;
140
Writeln(FLocation + 'Ceiling fan is on medium.');
141
end;
142![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
143
procedure TCeilingFan.Off;
144
begin
145
FLevel := 0;
146
Writeln(FLocation + 'Ceiling fan is on off.');
147
end;
148![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
149
{ TGarageDoor }
150![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
151
constructor TGarageDoor.Create(aLocation: String);
152
begin
153
FLocation := aLocation;
154
end;
155![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
156
procedure TGarageDoor.Down;
157
begin
158
Writeln(FLocation + 'Garage door is down.');
159
end;
160![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
161
procedure TGarageDoor.LightOff;
162
begin
163
Writeln(FLocation + 'Garage light is off.');
164
end;
165![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
166
procedure TGarageDoor.LightOn;
167
begin
168
Writeln(FLocation + 'Garage light is on.');
169
end;
170![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
171
procedure TGarageDoor.Stop;
172
begin
173
Writeln(FLocation + 'Garage door is stopped.');
174
end;
175![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
176
procedure TGarageDoor.Up;
177
begin
178
Writeln(FLocation + 'Garage door is up.');
179
end;
180![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
181
{ TStereo }
182![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
183
constructor TStereo.Create(aLocation: String);
184
begin
185
FLocation := aLocation;
186
end;
187![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
188
procedure TStereo.Off;
189
begin
190
Writeln(FLocation + 'Stereo is off.');
191
end;
192![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
193
procedure TStereo.Play;
194
begin
195
Writeln(FLocation + 'Stereo is on.');
196
end;
197![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
198
procedure TStereo.SetCD;
199
begin
200
Writeln(FLocation + 'Stereo is set for CD input.');
201
end;
202![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
203
procedure TStereo.SetDVD;
204
begin
205
Writeln(FLocation + 'Stereo is set for DVD input.');
206
end;
207![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
208
procedure TStereo.SetRadio;
209
begin
210
Writeln(FLocation + 'Stereo is set for radio.');
211
end;
212![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
213
procedure TStereo.SetVolume(aVolume: Integer);
214
begin
215
Writeln(FLocation + 'Stereo volume set to ', aVolume);
216
end;
217![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
218
{ TTV }
219![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
220
constructor TTV.Create(aLocation: String);
221
begin
222
FLocation := aLocation;
223
end;
224![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
225
procedure TTV.Off;
226
begin
227
Writeln(FLocation + 'TV is off.');
228
end;
229![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
230
procedure TTV.Open;
231
begin
232
Writeln(FLocation + 'TV is on.');
233
end;
234![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
235
procedure TTV.SetInputChannel;
236
begin
237
FChannel := 3;
238
Writeln('Channel is set for VCR.');
239
end;
240![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
241
{ THottub }
242![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
243
procedure THottub.BubblesOff;
244
begin
245
if Off then
246
Writeln('Hottub is not bubbling.');
247
end;
248![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
249
procedure THottub.BubblesOpen;
250
begin
251
if Open then
252
Writeln('Hottub is bubbling.');
253
end;
254![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
255
procedure THottub.Cool;
256
begin
257
FTemp := 98;
258
Writeln('Hottub is cooling to 98 degrees.');
259
end;
260![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
261
function THottub.GetTemp: Integer;
262
begin
263
Result := FTemp;
264
end;
265![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
266
procedure THottub.Heat;
267
begin
268
FTemp := 105;
269
Writeln('Hottub is heating to a steaming 105 degrees.');
270
end;
271![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
272
procedure THottub.JetsOff;
273
begin
274
if Off then
275
Writeln('Hottub jets are off.');
276
end;
277![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
278
procedure THottub.JetsOpen;
279
begin
280
if Open then
281
Writeln('Hottub jets are open.');
282
end;
283![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
284
function THottub.Off: Boolean;
285
begin
286
FOpen := False;
287
Result := FOpen;
288
end;
289![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
290
function THottub.Open: Boolean;
291
begin
292
FOpen := True;
293
Result := FOpen;
294
end;
295![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
296
procedure THottub.SetTemp(const Value: Integer);
297
begin
298
FTemp := Value;
299
end;
300![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
301
end.
1![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
{《HeadFirst设计模式》之命令模式 }
3
{ 将命令接收者中的动作包装成命令对象 }
4
{ 编译工具 :Delphi7.0 }
5
{ 联系方式 :guzh-0417@163.com }
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
unit uCommandObject;
8![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
interface
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
uses
12
uReceiveObject;
13![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
type
15
TCommand = class(TObject)
16
public
17
procedure Execute; virtual; abstract;
18
end;
19![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
TNoCommand = class(TCommand)
21
public
22
procedure Execute; override;
23
end;
24![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
TLightOnCommand = class(TCommand)
26
private
27
FLight: TLight;
28
public
29
constructor Create(aLight: TLight);
30
procedure Execute; override;
31
end;
32![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
TLightOffCommand = class(TCommand)
34
protected
35
FLight: TLight;
36
public
37
constructor Create(aLight: TLight);
38
procedure Execute; override;
39
end;
40![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
TLivingRoomLightOnCommand = class(TLightOnCommand)
42
end;
43![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
TLivingRoomLightOffCommand = class(TLightOffCommand)
45
end;
46![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
TKitchenLightOnCommand = class(TLightOnCommand)
48
end;
49![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
50
TKitchenLightOffCommand = class(TLightOffCommand)
51
end;
52![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
53
TCeilingFanOnCommand = class(TCommand)
54
private
55
FCeilingFan: TCeilingFan;
56
public
57
constructor Create(aCeilingFan: TCeilingFan);
58
procedure Execute; override;
59
end;
60![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
61
TCeilingFanOffCommand = class(TCommand)
62
private
63
FCeilingFan: TCeilingFan;
64
public
65
constructor Create(aCeilingFan: TCeilingFan);
66
procedure Execute; override;
67
end;
68![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
69
TGarageDoorUpCommand = class(TCommand)
70
private
71
FGarageDoor: TGarageDoor;
72
public
73
constructor Create(aGarageDoor: TGarageDoor);
74
procedure Execute; override;
75
end;
76![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
77
TGarageDoorDownCommand = class(TCommand)
78
private
79
FGarageDoor: TGarageDoor;
80
public
81
constructor Create(aGarageDoor: TGarageDoor);
82
procedure Execute; override;
83
end;
84![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
85
TStereoOnWithCDCommand = class(TCommand)
86
private
87
FStereo: TStereo;
88
public
89
constructor Create(aStereo: TStereo);
90
procedure Execute; override;
91
end;
92![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
93
TStereoOffCommand = class(TCommand)
94
private
95
FStereo: TStereo;
96
public
97
constructor Create(aStereo: TStereo);
98
procedure Execute; override;
99
end;
100![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
101
THottubOnCommand = class(TCommand)
102
private
103
FHottub: THottub;
104
public
105
constructor Create(aHottub: THottub);
106
procedure Execute; override;
107
end;
108![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
109
THottubOffCommand = class(TCommand)
110
private
111
FHottub: THottub;
112
public
113
constructor Create(aHottub: THottub);
114
procedure Execute; override;
115
end;
116![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
117
implementation
118![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
119
{ TNoCommand }
120![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
121
procedure TNoCommand.Execute;
122
begin
123
end;
124![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
125
{ TLightOnCommand }
126![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
127
constructor TLightOnCommand.Create(aLight: TLight);
128
begin
129
FLight := aLight;
130
end;
131![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
132
procedure TLightOnCommand.Execute;
133
begin
134
FLight.Open;
135
end;
136![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
137
{ TLightOffCommand }
138![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
139
constructor TLightOffCommand.Create(aLight: TLight);
140
begin
141
FLight := aLight;
142
end;
143![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
144
procedure TLightOffCommand.Execute;
145
begin
146
FLight.Off;
147
end;
148![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
149![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
150![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
151
{ TLivingRoomLightOnCommand }
152![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
153
{ TLivingRoomLightOffCommand }
154![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
155
{ TKitchenLightOnCommand }
156![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
157
{ TKitchenLightOffCommand }
158![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
159![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
160![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
161
{ TCeilingFanOnCommand }
162![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
163
constructor TCeilingFanOnCommand.Create(aCeilingFan: TCeilingFan);
164
begin
165
FCeilingFan := aCeilingFan;
166
end;
167![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
168
procedure TCeilingFanOnCommand.Execute;
169
begin
170
FCeilingFan.High;
171
end;
172![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
173
{ TCeilingFanOffCommand }
174![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
175
constructor TCeilingFanOffCommand.Create(aCeilingFan: TCeilingFan);
176
begin
177
FCeilingFan := aCeilingFan;
178
end;
179![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
180
procedure TCeilingFanOffCommand.Execute;
181
begin
182
FCeilingFan.Off;
183
end;
184![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
185
{ TGarageDoorUpCommand }
186![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
187
constructor TGarageDoorUpCommand.Create(aGarageDoor: TGarageDoor);
188
begin
189
FGarageDoor := aGarageDoor;
190
end;
191![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
192
procedure TGarageDoorUpCommand.Execute;
193
begin
194
FGarageDoor.Up;
195
FGarageDoor.LightOn;
196
end;
197![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
198
{ TGarageDoorDownCommand }
199![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
200
constructor TGarageDoorDownCommand.Create(aGarageDoor: TGarageDoor);
201
begin
202
FGarageDoor := aGarageDoor;
203
end;
204![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
205
procedure TGarageDoorDownCommand.Execute;
206
begin
207
FGarageDoor.Down;
208
FGarageDoor.LightOff;
209
end;
210![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
211
{ TStereoOnWithCDCommand }
212![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
213
constructor TStereoOnWithCDCommand.Create(aStereo: TStereo);
214
begin
215
FStereo := aStereo;
216
end;
217![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
218
procedure TStereoOnWithCDCommand.Execute;
219
begin
220
FStereo.Play;
221
FStereo.SetCD;
222
FStereo.SetVolume(11);
223
end;
224![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
225
{ TStereoOffCommand }
226![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
227
constructor TStereoOffCommand.Create(aStereo: TStereo);
228
begin
229
FStereo := aStereo;
230
end;
231![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
232
procedure TStereoOffCommand.Execute;
233
begin
234
FStereo.Off;
235
end;
236![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
237
{ THottubOnCommand }
238![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
239
constructor THottubOnCommand.Create(aHottub: Thottub);
240
begin
241
FHottub := aHottub;
242
end;
243![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
244
procedure THottubOnCommand.Execute;
245
begin
246
FHottub.Open;
247
FHottub.Heat;
248
FHottub.BubblesOpen;
249
FHottub.JetsOpen;
250
end;
251![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
252
{ THottubOffCommand }
253![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
254
constructor THottubOffCommand.Create(aHottub: THottub);
255
begin
256
FHottub := aHottub;
257
end;
258![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
259
procedure THottubOffCommand.Execute;
260
begin
261
FHottub.Cool;
262
FHottub.Off;
263
end;
264![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
265
end.
1![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
{《HeadFirst设计模式》之命令模式 }
3
{ 本单元中的类为命令的请求者,向命令对象发出请求,}
4
{ 命令对象通过委托,执行命令接收者中的动作。 }
5
{ 编译工具 :Delphi7.0 }
6
{ 联系方式 :guzh-0417@163.com }
7![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
unit uInvoker;
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
interface
11![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
uses
13
uCommandObject;
14![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
type
16
TRemoteControl = class(TObject)
17
private
18
FOnCommands : array of TCommand;
19
FOffCommands: array of TCommand;
20
FNoCommand : TCommand;
21
public
22
constructor Create;
23
destructor Destroy; override;
24
procedure SetCommand(aSlot: Integer; aOnCommand, aOffCommand: TCommand);
25
procedure OnButtonWasPressed(aSlot: Integer);
26
procedure OffButtonWasPressed(aSlot: Integer);
27
end;
28![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
implementation
30![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
{ TRemoteControl }
32![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
constructor TRemoteControl.Create;
34
var
35
i: Integer;
36
begin
37
SetLength(FOnCommands, 7);
38
SetLength(FOffCommands, 7);
39![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
FNoCommand := TNoCommand.Create;
41
for i := 0 to 6 do
42
begin
43
FOnCommands [i] := FNoCommand;
44
FOffCommands[i] := FNoCommand;
45
end;
46
end;
47![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
destructor TRemoteControl.Destroy;
49
begin
50
FNoCommand.Free;
51
inherited;
52
end;
53![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
54
procedure TRemoteControl.OffButtonWasPressed(aSlot: Integer);
55
begin
56
FOffCommands[aSlot].Execute;
57
end;
58![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
59
procedure TRemoteControl.OnButtonWasPressed(aSlot: Integer);
60
begin
61
FOnCommands [aSlot].Execute;
62
end;
63![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
64
procedure TRemoteControl.SetCommand(aSlot: Integer; aOnCommand, aOffCommand: TCommand);
65
begin
66
FOnCommands [aSlot] := aOnCommand;
67
FOffCommands[aSlot] := aOffCommand;
68
end;
69![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
70
end.
1![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
{《HeadFirst设计模式》之命令模式 }
3
{ 客户端负责创建具体的命令对象 }
4
{ 编译工具 :Delphi7.0 }
5
{ 联系方式 :guzh-0417@163.com }
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
program pRemoteControlTest;
8![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
{$APPTYPE CONSOLE}
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
uses
12
uReceiveObject in 'uReceiveObject.pas',
13
uCommandObject in 'uCommandObject.pas',
14
uInvoker in 'uInvoker.pas';
15![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
var
17
RemoteControl : TRemoteControl;
18![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
19
LivingRoomLight: TLight;
20
KitchenLight : TLight;
21
CeilingFan : TCeilingFan;
22
GarageDoor : TGarageDoor;
23
Stereo : TStereo;
24![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
LivingRoomLightOnCommand : TLightOnCommand;
26
LivingRoomLightOffCommand: TLightOffCommand;
27
KitchenLightOnCommand : TLightOnCommand;
28
KitchenLightOffCommand : TLightOffCommand;
29![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
CeilingFanOnCommand : TCeilingFanOnCommand;
31
CeilingFanOffCommand : TCeilingFanOffCommand;
32![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
GarageDoorUpCommand : TGarageDoorUpCommand;
34
GarageDoorDownCommand : TGarageDoorDownCommand;
35![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
StereoOnWithCDCommand : TStereoOnWithCDCommand;
37
StereoOffCommand : TStereoOffCommand;
38![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
39
begin
40
RemoteControl := TRemoteControl.Create;
41![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
LivingRoomLight := TLight.Create('Living Room');
43
KitchenLight := TLight.Create('Kitchen');
44
CeilingFan := TCeilingFan.Create('Living Room ');
45
GarageDoor := TGarageDoor.Create('');;
46
Stereo := TStereo.Create('Living Room');
47![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
LivingRoomLightOnCommand := TLightOnCommand.Create(LivingRoomLight);
49
LivingRoomLightOffCommand := TLightOffCommand.Create(LivingRoomLight);
50
KitchenLightOnCommand := TLightOnCommand.Create(KitchenLight);
51
KitchenLightOffCommand := TLightOffCommand.Create(KitchenLight);
52![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
53
CeilingFanOnCommand := TCeilingFanOnCommand.Create(CeilingFan);
54
CeilingFanOffCommand := TCeilingFanOffCommand.Create(CeilingFan);
55![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
56
GarageDoorUpCommand := TGarageDoorUpCommand.Create(GarageDoor);
57
GarageDoorDownCommand := TGarageDoorDownCommand.Create(GarageDoor);
58![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
59
StereoOnWithCDCommand := TStereoOnWithCDCommand.Create(Stereo);
60
StereoOffCommand := TStereoOffCommand.Create(Stereo);
61![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
62
RemoteControl.SetCommand(0, LivingRoomLightOnCommand, LivingRoomLightOffCommand);
63
RemoteControl.SetCommand(1, KitchenLightOnCommand, KitchenLightOffCommand);
64
RemoteControl.SetCommand(2, CeilingFanOnCommand, CeilingFanOffCommand);
65
RemoteControl.SetCommand(3, StereoOnWithCDCommand, StereoOffCommand);
66
RemoteControl.SetCommand(4, GarageDoorUpCommand, GarageDoorDownCommand);
67![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
68
RemoteControl.OnButtonWasPressed (0);
69
RemoteControl.OffButtonWasPressed(0);
70
RemoteControl.OnButtonWasPressed (1);
71
RemoteControl.OffButtonWasPressed(1);
72
RemoteControl.OnButtonWasPressed (2);
73
RemoteControl.OffButtonWasPressed(2);
74
RemoteControl.OnButtonWasPressed (3);
75
RemoteControl.OffButtonWasPressed(3);
76
RemoteControl.OnButtonWasPressed (4);
77
RemoteControl.OffButtonWasPressed(4);
78![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
79
RemoteControl.Free;
80
LivingRoomLight.Free;
81
KitchenLight.Free;
82
CeilingFan.Free;
83
GarageDoor.Free;
84
Stereo.Free;
85
LivingRoomLightOnCommand.Free;
86
LivingRoomLightOffCommand.Free;
87
KitchenLightOnCommand.Free;
88
KitchenLightOffCommand.Free;
89
CeilingFanOnCommand.Free;
90
CeilingFanOffCommand.Free;
91
GarageDoorUpCommand.Free;
92
GarageDoorDownCommand.Free;
93
StereoOnWithCDCommand.Free;
94
StereoOffCommand.Free;
95![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
96
Readln;
97
end.
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/c6c5ef6c21d114218c59ff5b2ac32062.jpeg)
转载于:https://www.cnblogs.com/0x2D-0x22/p/4076163.html