![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
unit uSubObject;
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
interface
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
type
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
{ TAmplifier与TTuner,TCDPlayer,TDVDPlayer相互依赖。 }
8
{ 在TTuner等的简单实现时用不到对TAmplifier的引用, }
9
{ 但现实生活中就应该让TAmplifier提供服务,所以这里保留了。 }
10
{ TProjector对TDVDPlayer的引用也是同样道理。 }
11
{ 前置TAmplifier也可以,把TAmplifier的声明放在TTuner等声明的后面 }
12![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
TTuner = class;
14
TCDPlayer = class;
15
TDVDPlayer = class;
16![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
TAmplifier = class(TObject)
18
private
19
FTuner: TTuner;
20
FCD : TCDPlayer;
21
FDVD: TDVDPlayer;
22
FDescription: String;
23
public
24
constructor Create(aDescription: String);
25
procedure Open;
26
procedure Off;
27
procedure SetStereoSound;
28
procedure SetSurroundSound;
29
procedure SetVolume(aLevel: Integer);
30
procedure SetTuner (aTuner: TTuner);
31
procedure SetCD (aCD : TCDPlayer);
32
procedure SetDVD(aDVD: TDVDPlayer);
33
function ToString: String;
34
end;
35![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
TTuner = class(TObject)
37
private
38
FAmplifier: TAmplifier;
39
FDescription: String;
40
FFrequency: Double;
41
public
42
constructor Create(aDescription: String; aAmplifier: TAmplifier);
43
procedure Open;
44
procedure Off;
45
procedure SetAm;
46
procedure SetFm;
47
procedure SetFrequency(aFrequency: Double);
48
function ToString: String;
49
end;
50![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
TCDPlayer = class(TObject)
52
private
53
FAmplifier: TAmplifier;
54
FDescription: String;
55
FCurrentTrack: Integer;
56
FTitle: String;
57
public
58
constructor Create(aDescription: String; aAmplifier: TAmplifier);
59
procedure Open;
60
procedure Off;
61
procedure Eject;
62
procedure Play(aTitle: String ); overload;
63
procedure Play(aTrack: Integer); overload;
64
procedure Stop;
65
procedure Pause;
66
function ToString: String;
67
end;
68![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
69
TDVDPlayer = class(TObject)
70
private
71
FAmplifier: TAmplifier;
72
FDescription: String;
73
FCurrentTrack: Integer;
74
FMovie: String;
75
public
76
constructor Create(aDescription: String; aAmplifier: TAmplifier);
77
procedure Open;
78
procedure Off;
79
procedure Eject;
80
procedure Play(aMovie: String ); overload;
81
procedure Play(aTrack: Integer); overload;
82
procedure Stop;
83
procedure Pause;
84
procedure SetTwoChannelAudio;
85
procedure SetSurroundAudio;
86
function ToString: String;
87
end;
88![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
89
TScreen = class(TObject)
90
private
91
FDescription: String;
92
public
93
constructor Create(aDescription: String);
94
procedure UP;
95
procedure Down;
96
function ToString: String;
97
end;
98![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
99
TPopcornPopper = class(TObject)
100
private
101
FDescription: String;
102
public
103
constructor Create(aDescription: String);
104
procedure Open;
105
procedure Off;
106
procedure Pop;
107
function ToString: String;
108
end;
109![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
110
TTheaterLights = class(TObject)
111
private
112
FDescription: String;
113
public
114
constructor Create(aDescription: String);
115
procedure Open;
116
procedure Off;
117
procedure Dim(aLevel: Integer);
118
function ToString: String;
119
end;
120![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
121
TProjector = class(TObject)
122
private
123
FDescription: String;
124
FDVD: TDVDPlayer;
125
public
126
constructor Create(aDescription: String; aDVD: TDVDPlayer);
127
procedure Open;
128
procedure Off;
129
procedure WideScreenMode;
130
procedure TVMode;
131
function ToString: String;
132
end;
133![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
134
implementation
135![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
136
{ TAmplifier }
137![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
138
constructor TAmplifier.Create(aDescription: String);
139
begin
140
FDescription := aDescription;
141
end;
142![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
143
procedure TAmplifier.Off;
144
begin
145
Writeln(FDescription + ' off');
146
end;
147![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
148
procedure TAmplifier.Open;
149
begin
150
Writeln(FDescription + ' on');
151
end;
152![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
153
procedure TAmplifier.SetCD(aCD: TCDPlayer);
154
begin
155
Writeln(FDescription + ' setting CD player to ' + aCD.ToString);
156
FCD := aCD;
157
end;
158![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
159
procedure TAmplifier.SetDVD(aDVD: TDVDPlayer);
160
begin
161
Writeln(FDescription + ' setting DVD player to ' + aDVD.ToString);
162
FDVD := aDVD;
163
end;
164![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
165
procedure TAmplifier.SetStereoSound;
166
begin
167
Writeln(FDescription + ' stereo mode on');
168
end;
169![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
170
procedure TAmplifier.SetSurroundSound;
171
begin
172
Writeln(FDescription + ' surround sound on (5 speakers, 1 subwoofer)');
173
end;
174![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
175
procedure TAmplifier.SetTuner(aTuner: TTuner);
176
begin
177
Writeln(FDescription + ' setting Tuner player to ', aTuner.ToString);
178
FTuner := aTuner;
179
end;
180![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
181
procedure TAmplifier.SetVolume(aLevel: Integer);
182
begin
183
Writeln(FDescription + ' setting volume to ' , aLevel);
184
end;
185![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
186
function TAmplifier.ToString: String;
187
begin
188
Result := FDescription;
189
end;
190![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
191
{ TTuner }
192![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
193
constructor TTuner.Create(aDescription: String; aAmplifier: TAmplifier);
194
begin
195
FDescription := aDescription;
196
FAmplifier := aAmplifier;
197
end;
198![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
199
procedure TTuner.Off;
200
begin
201
Writeln(FDescription + ' off');
202
end;
203![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
204
procedure TTuner.Open;
205
begin
206
Writeln(FDescription + ' on');
207
end;
208![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
209
procedure TTuner.SetAm;
210
begin
211
Writeln(FDescription + ' setting AM mode');
212
end;
213![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
214
procedure TTuner.SetFm;
215
begin
216
Writeln(FDescription + ' setting FM mode');
217
end;
218![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
219
procedure TTuner.SetFrequency(aFrequency: Double);
220
begin
221
Writeln(FDescription + ' setting frequency to ', aFrequency);
222
FFrequency := aFrequency;
223
end;
224![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
225
function TTuner.ToString: String;
226
begin
227
Result := FDescription;
228
end;
229![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
230
{ TCDPlayer }
231![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
232
constructor TCDPlayer.Create(aDescription: String; aAmplifier: TAmplifier);
233
begin
234
FDescription := aDescription;
235
FAmplifier := aAmplifier;
236
end;
237![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
238
procedure TCDPlayer.Eject;
239
begin
240
FTitle := '';
241
Writeln(FDescription + ' eject');
242
end;
243![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
244
procedure TCDPlayer.Off;
245
begin
246
Writeln(FDescription + ' off');
247
end;
248![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
249
procedure TCDPlayer.Open;
250
begin
251
Writeln(FDescription + ' on');
252
end;
253![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
254
procedure TCDPlayer.Pause;
255
begin
256
Writeln(FDescription + ' paused <' + FTitle + '>');
257
end;
258![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
259
procedure TCDPlayer.Play(aTitle: String);
260
begin
261
FTitle := aTitle;
262
FCurrentTrack := 0;
263
Writeln(FDescription + ' playing <' + FTitle + '>');
264
end;
265![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
266
procedure TCDPlayer.Play(aTrack: Integer);
267
begin
268
if FTitle = '' then
269
begin
270
Writeln(FDescription + ' can'' t play track ', aTrack, ', no CD inserted');
271
end
272
else
273
begin
274
FCurrentTrack := aTrack;
275
Writeln(FDescription + ' playing track ', FCurrentTrack);
276
end;
277
end;
278![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
279
procedure TCDPlayer.Stop;
280
begin
281
FCurrentTrack := 0;
282
Writeln(FDescription + ' stopped');
283
end;
284![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
285
function TCDPlayer.ToString: String;
286
begin
287
Result := FDescription;
288
end;
289![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
290
{ TDVDPlayer }
291![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
292
constructor TDVDPlayer.Create(aDescription: String; aAmplifier: TAmplifier);
293
begin
294
FDescription := aDescription;
295
FAmplifier := aAmplifier;
296
end;
297![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
298
procedure TDVDPlayer.Eject;
299
begin
300
Writeln(FDescription + ' eject');
301
end;
302![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
303
procedure TDVDPlayer.Off;
304
begin
305
Writeln(FDescription + ' off');
306
end;
307![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
308
procedure TDVDPlayer.Open;
309
begin
310
Writeln(FDescription + ' on');
311
end;
312![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
313
procedure TDVDPlayer.Pause;
314
begin
315
Writeln(FDescription + ' paused <' + FMovie + '>');
316
end;
317![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
318
procedure TDVDPlayer.Play(aTrack: Integer);
319
begin
320
if FMovie = '' then
321
begin
322
Writeln(FDescription + ' can'' t play track ', aTrack, ', no DVD inserted');
323
end
324
else
325
begin
326
FCurrentTrack := aTrack;
327
Writeln(FDescription + ' playing track ', FCurrentTrack, ' of <', FMovie, '>');
328
end;
329
end;
330![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
331
procedure TDVDPlayer.Play(aMovie: String);
332
begin
333
FMovie := aMovie;
334
FCurrentTrack := 0;
335
Writeln(FDescription + ' playing <' + FMovie + '>');
336
end;
337![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
338
procedure TDVDPlayer.SetSurroundAudio;
339
begin
340
Writeln(FDescription + ' set surround audio');
341
end;
342![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
343
procedure TDVDPlayer.SetTwoChannelAudio;
344
begin
345
Writeln(FDescription + ' set two channel audio');
346
end;
347![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
348
procedure TDVDPlayer.Stop;
349
begin
350
FCurrentTrack := 0;
351
Writeln(FDescription + ' <' + FMovie + '> stopped');
352
end;
353![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
354
function TDVDPlayer.ToString: String;
355
begin
356
Result := FDescription;
357
end;
358![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
359
{ TScreen }
360![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
361
constructor TScreen.Create(aDescription: String);
362
begin
363
FDescription := aDescription;
364
end;
365![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
366
procedure TScreen.Down;
367
begin
368
Writeln(FDescription, ' going down');
369
end;
370![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
371
function TScreen.ToString: String;
372
begin
373
Result := FDescription;
374
end;
375![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
376
procedure TScreen.UP;
377
begin
378
Writeln(FDescription, ' going up');
379
end;
380![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
381
{ TPopcornPopper }
382![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
383
constructor TPopcornPopper.Create(aDescription: String);
384
begin
385
FDescription := aDescription;
386
end;
387![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
388
procedure TPopcornPopper.Off;
389
begin
390
Writeln(FDescription, ' off');
391
end;
392![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
393
procedure TPopcornPopper.Open;
394
begin
395
Writeln(FDescription, ' on');
396
end;
397![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
398
procedure TPopcornPopper.Pop;
399
begin
400
Writeln(FDescription, ' popping popcorn!');
401
end;
402![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
403
function TPopcornPopper.ToString: String;
404
begin
405
Result := FDescription;
406
end;
407![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
408
{ TTheaterLights }
409![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
410
constructor TTheaterLights.Create(aDescription: String);
411
begin
412
FDescription := aDescription;
413
end;
414![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
415
procedure TTheaterLights.Dim(aLevel: Integer);
416
begin
417
Writeln(FDescription, ' dimming to ', aLevel, '%');
418
end;
419![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
420
procedure TTheaterLights.Off;
421
begin
422
Writeln(FDescription, ' off');
423
end;
424![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
425
procedure TTheaterLights.Open;
426
begin
427
Writeln(FDescription, ' on');
428
end;
429![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
430
function TTheaterLights.ToString: String;
431
begin
432
Result := FDescription;
433
end;
434![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
435
{ TProjector }
436![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
437
constructor TProjector.Create(aDescription: String; aDVD: TDVDPlayer);
438
begin
439
FDescription := aDescription;
440
FDVD := aDVD;
441
end;
442![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
443
procedure TProjector.Off;
444
begin
445
Writeln(FDescription, ' off');
446
end;
447![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
448
procedure TProjector.Open;
449
begin
450
Writeln(FDescription, ' on');
451
end;
452![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
453
function TProjector.ToString: String;
454
begin
455
Result := FDescription;
456
end;
457![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
458
procedure TProjector.TVMode;
459
begin
460
Writeln(FDescription + ' in tv mode (4x3 aspect ratio)');
461
end;
462![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
463
procedure TProjector.WideScreenMode;
464
begin
465
Writeln(FDescription + ' in widescreen mode (16x9 aspect ratio)');
466
end;
467![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
468
end.
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
unit uFacadeObject;
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
interface
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
uses
6
uSubObject;
7![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
type
9
THomeTheaterFacade = class(TObject)
10
private
11
FAmp: TAmplifier;
12
FTuner: TTuner;
13
FDVD: TDVDPlayer;
14
FCD: TCDPlayer;
15
FProjector: TProjector;
16
FLights: TTheaterLights;
17
FScreen: TScreen;
18
FPopper: TPopcornPopper;
19
public
20
constructor Create(aAmp : TAmplifier;
21
aTuner : TTuner;
22
aDVD : TDVDPlayer;
23
aCD : TCDPlayer;
24
aProjector: TProjector;
25
aLights: TTheaterLights;
26
aScreen: TScreen;
27
aPopper: TPopcornPopper);
28
procedure WatchMovie(aMovie: String);
29
procedure EndMovie;
30
procedure ListenToCD(CDTitle: String);
31
procedure EndCD;
32
procedure ListenToRadio(aFrequency: Double);
33
procedure EndRadio;
34
end;
35![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
implementation
37![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
38
{ THomeTheaterFacade }
39![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
constructor THomeTheaterFacade.Create(aAmp : TAmplifier;
41
aTuner : TTuner;
42
aDVD : TDVDPlayer;
43
aCD : TCDPlayer;
44
aProjector: TProjector;
45
aLights: TTheaterLights;
46
aScreen: TScreen;
47
aPopper: TPopcornPopper);
48
begin
49
FAmp := aAmp;
50
FTuner := aTuner;
51
FDVD := aDVD;
52
FCD := aCD;
53
FProjector := aProjector;
54
FLights := aLights;
55
FScreen := aScreen;
56
FPopper := aPopper;
57
end;
58![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
59
procedure THomeTheaterFacade.EndCD;
60
begin
61
Writeln('Shutting down CD
');
62
FAmp.Off;
63
FAmp.SetCD(FCD);
64
FCD.Eject;
65
FCD.Off;
66
end;
67![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
68
procedure THomeTheaterFacade.EndMovie;
69
begin
70
Writeln('Shutting movie theater down
');
71
FPopper.Off;
72
FLights.Open;
73
FScreen.UP;
74
FProjector.Off;
75
FAmp.Off;
76
FDVD.Stop;
77
FDVD.Eject;
78
FDVD.Off;
79
end;
80![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
81
procedure THomeTheaterFacade.EndRadio;
82
begin
83
Writeln('Shutting down the tuner
');
84
FTuner.Off;
85
FAmp.Off;
86
end;
87![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
88
procedure THomeTheaterFacade.ListenToCD(CDTitle: String);
89
begin
90
Writeln('Get ready for an audiopile experence
');
91
FLights.Open;
92
FAmp.Open;
93
FAmp.SetVolume(5);
94
FAmp.SetCD(FCD);
95
FAmp.SetStereoSound;
96
FCD.Open;
97
FCD.Play(CDTitle);
98
end;
99![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
100
procedure THomeTheaterFacade.ListenToRadio(aFrequency: Double);
101
begin
102
Writeln('Tuning in the airwaves
');
103
FTuner.Open;
104
FTuner.SetFrequency(aFrequency);
105
FAmp.Open;
106
FAmp.SetVolume(5);
107
FAmp.SetTuner(FTuner);
108
end;
109![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
110
procedure THomeTheaterFacade.WatchMovie(aMovie: String);
111
begin
112
Writeln('Get ready to watch a movie
');
113
FPopper.Open;
114
FPopper.Pop;
115
FLights.Dim(10);
116
FScreen.Down;
117
FProjector.Open;
118
FProjector.WideScreenMode;
119
FAmp.Open;
120
FAmp.SetDVD(FDVD);
121
FAmp.SetSurroundSound;
122
FAmp.SetVolume(5);
123
FDVD.Open;
124
FDVD.Play(aMovie);
125
end;
126![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
127
end.
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
program pHomeTheaterTestDrive;
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
{$APPTYPE CONSOLE}
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
uses
6
SysUtils,
7
uFacadeObject in 'uFacadeObject.pas',
8
uSubObject in 'uSubObject.pas';
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
var
11
Amp : TAmplifier;
12
Tuner : TTuner;
13
DVD : TDVDPlayer;
14
CD : TCDPlayer;
15
Projector: TProjector;
16
Lights: TTheaterLights;
17
Screen: TScreen;
18
Popper: TPopcornPopper;
19![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
HomeTheater: THomeTheaterFacade;
21
22
begin
23
Amp := TAmplifier.Create('Top-O-Line Amplifier');
24
Tuner := TTuner.Create('Top-O-Line AM/FM Tuner', Amp);
25
DVD := TDVDPlayer.Create('Top-O-Line DVD Player', Amp);
26
CD := TCDPlayer.Create('Top-O-Line CD Player', Amp);
27
Projector := TProjector.Create('Top-O-Line Projector', DVD);
28
Lights := TTheaterLights.Create('Theater Ceiling Lights');
29
Screen := TScreen.Create('Theater Screen');
30
Popper := TPopcornPopper.Create('Popcorn Popper');
31![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
HomeTheater := THomeTheaterFacade.Create(Amp, Tuner, DVD, CD, Projector,
33
Lights, Screen, Popper);
34![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
35
HomeTheater.WatchMovie('Raiders of the Lost Ark');
36
Writeln;
37
HomeTheater.EndMovie;
38![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
39
FreeAndNil(Amp);
40
FreeAndNil(Tuner);
41
FreeAndNil(DVD);
42
FreeAndNil(CD);
43
FreeAndNil(Projector);
44
FreeAndNil(Lights);
45
FreeAndNil(Screen);
46
FreeAndNil(Popper);
47
FreeAndNil(HomeTheater);
48![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
49
Readln;
50
end.
运行结果:
![](https://images.cnblogs.com/cnblogs_com/delphidesignpatterns/picHomeTheaterTestDrive.JPG)
posted on
2014-11-05 14:21
小光zfg
阅读(
326)
评论()
编辑
收藏
举报