Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---门面模式之HomeTheater
Posted on 2009-05-24 18:46 都市牧羊 阅读(690) 评论(0) 收藏 举报
 复杂的子系统
复杂的子系统1
 unit uSubObject;
unit uSubObject;2

3
 interface
interface4

5
 type
type6

7
 { TAmplifier与TTuner,TCDPlayer,TDVDPlayer相互依赖。            }
  { TAmplifier与TTuner,TCDPlayer,TDVDPlayer相互依赖。            }8
 { 在TTuner等的简单实现时用不到对TAmplifier的引用,               }
  { 在TTuner等的简单实现时用不到对TAmplifier的引用,               }9
 { 但现实生活中就应该让TAmplifier提供服务,所以这里保留了。       }
  { 但现实生活中就应该让TAmplifier提供服务,所以这里保留了。       }10
 { TProjector对TDVDPlayer的引用也是同样道理。                     }
  { TProjector对TDVDPlayer的引用也是同样道理。                     }11
 { 前置TAmplifier也可以,把TAmplifier的声明放在TTuner等声明的后面 }
  { 前置TAmplifier也可以,把TAmplifier的声明放在TTuner等声明的后面 }12

13
 TTuner     = class;
  TTuner     = class;14
 TCDPlayer  = class;
  TCDPlayer  = class;15
 TDVDPlayer = class;
  TDVDPlayer = class;16

17
 TAmplifier = class(TObject)
  TAmplifier = class(TObject)18
 private
  private19
 FTuner: TTuner;
    FTuner: TTuner;20
 FCD : TCDPlayer;
    FCD : TCDPlayer;21
 FDVD: TDVDPlayer;
    FDVD: TDVDPlayer;22
 FDescription: String;
    FDescription: String;23
 public
  public24
 constructor Create(aDescription: String);
    constructor Create(aDescription: String);25
 procedure Open;
    procedure Open;26
 procedure Off;
    procedure Off;27
 procedure SetStereoSound;
    procedure SetStereoSound;28
 procedure SetSurroundSound;
    procedure SetSurroundSound;29
 procedure SetVolume(aLevel: Integer);
    procedure SetVolume(aLevel: Integer);30
 procedure SetTuner (aTuner: TTuner);
    procedure SetTuner (aTuner: TTuner);31
 procedure SetCD (aCD : TCDPlayer);
    procedure SetCD (aCD : TCDPlayer);32
 procedure SetDVD(aDVD: TDVDPlayer);
    procedure SetDVD(aDVD: TDVDPlayer);33
 function ToString: String;
    function ToString: String;34
 end;
  end;35

36
 TTuner = class(TObject)
  TTuner = class(TObject)37
 private
  private38
 FAmplifier: TAmplifier;
    FAmplifier: TAmplifier;39
 FDescription: String;
    FDescription: String;40
 FFrequency: Double;
    FFrequency: Double;41
 public
  public42
 constructor Create(aDescription: String; aAmplifier: TAmplifier);
    constructor Create(aDescription: String; aAmplifier: TAmplifier);43
 procedure Open;
    procedure Open;44
 procedure Off;
    procedure Off;45
 procedure SetAm;
    procedure SetAm;46
 procedure SetFm;
    procedure SetFm;47
 procedure SetFrequency(aFrequency: Double);
    procedure SetFrequency(aFrequency: Double);48
 function ToString: String;
    function ToString: String;49
 end;
  end;50

51
 TCDPlayer = class(TObject)
  TCDPlayer = class(TObject)52
 private
  private53
 FAmplifier: TAmplifier;
    FAmplifier: TAmplifier;54
 FDescription: String;
    FDescription: String;55
 FCurrentTrack: Integer;
    FCurrentTrack: Integer;56
 FTitle: String;
    FTitle: String;57
 public
  public58
 constructor Create(aDescription: String; aAmplifier: TAmplifier);
    constructor Create(aDescription: String; aAmplifier: TAmplifier);59
 procedure Open;
    procedure Open;60
 procedure Off;
    procedure Off;61
 procedure Eject;
    procedure Eject;62
 procedure Play(aTitle: String ); overload;
    procedure Play(aTitle: String ); overload;63
 procedure Play(aTrack: Integer); overload;
    procedure Play(aTrack: Integer); overload;64
 procedure Stop;
    procedure Stop;65
 procedure Pause;
    procedure Pause;66
 function ToString: String;
    function ToString: String;67
 end;
  end;68

69
 TDVDPlayer = class(TObject)
  TDVDPlayer = class(TObject)70
 private
  private71
 FAmplifier: TAmplifier;
    FAmplifier: TAmplifier;72
 FDescription: String;
    FDescription: String;73
 FCurrentTrack: Integer;
    FCurrentTrack: Integer;74
 FMovie: String;
    FMovie: String;75
 public
  public76
 constructor Create(aDescription: String; aAmplifier: TAmplifier);
    constructor Create(aDescription: String; aAmplifier: TAmplifier);77
 procedure Open;
    procedure Open;78
 procedure Off;
    procedure Off;79
 procedure Eject;
    procedure Eject;80
 procedure Play(aMovie: String ); overload;
    procedure Play(aMovie: String ); overload;81
 procedure Play(aTrack: Integer); overload;
    procedure Play(aTrack: Integer); overload;82
 procedure Stop;
    procedure Stop;83
 procedure Pause;
    procedure Pause;84
 procedure SetTwoChannelAudio;
    procedure SetTwoChannelAudio;85
 procedure SetSurroundAudio;
    procedure SetSurroundAudio;86
 function ToString: String;
    function ToString: String;87
 end;
  end;88

89
 TScreen = class(TObject)
  TScreen = class(TObject)90
 private
  private91
 FDescription: String;
    FDescription: String;92
 public
  public93
 constructor Create(aDescription: String);
    constructor Create(aDescription: String);94
 procedure UP;
    procedure UP;95
 procedure Down;
    procedure Down;96
 function ToString: String;
    function ToString: String;97
 end;
  end;98

99
 TPopcornPopper = class(TObject)
  TPopcornPopper = class(TObject)100
 private
  private101
 FDescription: String;
    FDescription: String;102
 public
  public103
 constructor Create(aDescription: String);
    constructor Create(aDescription: String);104
 procedure Open;
    procedure Open;105
 procedure Off;
    procedure Off;106
 procedure Pop;
    procedure Pop;107
 function ToString: String;
    function ToString: String;108
 end;
  end;109

110
 TTheaterLights = class(TObject)
  TTheaterLights = class(TObject)111
 private
  private112
 FDescription: String;
    FDescription: String;113
 public
  public114
 constructor Create(aDescription: String);
    constructor Create(aDescription: String);115
 procedure Open;
    procedure Open;116
 procedure Off;
    procedure Off;117
 procedure Dim(aLevel: Integer);
    procedure Dim(aLevel: Integer);118
 function ToString: String;
    function ToString: String;119
 end;
  end;120

121
 TProjector = class(TObject)
  TProjector = class(TObject)122
 private
  private123
 FDescription: String;
    FDescription: String;124
 FDVD: TDVDPlayer;
    FDVD: TDVDPlayer;125
 public
  public126
 constructor Create(aDescription: String; aDVD: TDVDPlayer);
    constructor Create(aDescription: String; aDVD: TDVDPlayer);127
 procedure Open;
    procedure Open;128
 procedure Off;
    procedure Off;129
 procedure WideScreenMode;
    procedure WideScreenMode;130
 procedure TVMode;
    procedure TVMode;131
 function ToString: String;
    function ToString: String;132
 end;
  end;133

134
 implementation
implementation135

136
 { TAmplifier }
{ TAmplifier }137

138
 constructor TAmplifier.Create(aDescription: String);
constructor TAmplifier.Create(aDescription: String);139
 begin
begin140
 FDescription := aDescription;
  FDescription := aDescription;141
 end;
end;142

143
 procedure TAmplifier.Off;
procedure TAmplifier.Off;144
 begin
begin145
 Writeln(FDescription + ' off');
  Writeln(FDescription + ' off');146
 end;
end;147

148
 procedure TAmplifier.Open;
procedure TAmplifier.Open;149
 begin
begin150
 Writeln(FDescription + ' on');
  Writeln(FDescription + ' on');151
 end;
end;152

153
 procedure TAmplifier.SetCD(aCD: TCDPlayer);
procedure TAmplifier.SetCD(aCD: TCDPlayer);154
 begin
begin155
 Writeln(FDescription + ' setting CD player to ' + aCD.ToString);
  Writeln(FDescription + ' setting CD player to ' + aCD.ToString);156
 FCD := aCD;
  FCD := aCD;157
 end;
end;158

159
 procedure TAmplifier.SetDVD(aDVD: TDVDPlayer);
procedure TAmplifier.SetDVD(aDVD: TDVDPlayer);160
 begin
begin161
 Writeln(FDescription + ' setting DVD player to ' + aDVD.ToString);
  Writeln(FDescription + ' setting DVD player to ' + aDVD.ToString);162
 FDVD := aDVD;
  FDVD := aDVD;163
 end;
end;164

165
 procedure TAmplifier.SetStereoSound;
procedure TAmplifier.SetStereoSound;166
 begin
begin167
 Writeln(FDescription + ' stereo mode on');
  Writeln(FDescription + ' stereo mode on');168
 end;
end;169

170
 procedure TAmplifier.SetSurroundSound;
procedure TAmplifier.SetSurroundSound;171
 begin
begin172
 Writeln(FDescription + ' surround sound on (5 speakers, 1 subwoofer)');
  Writeln(FDescription + ' surround sound on (5 speakers, 1 subwoofer)');173
 end;
end;174

175
 procedure TAmplifier.SetTuner(aTuner: TTuner);
procedure TAmplifier.SetTuner(aTuner: TTuner);176
 begin
begin177
 Writeln(FDescription + ' setting Tuner player to ', aTuner.ToString);
  Writeln(FDescription + ' setting Tuner player to ', aTuner.ToString);178
 FTuner := aTuner;
  FTuner := aTuner;179
 end;
end;180

181
 procedure TAmplifier.SetVolume(aLevel: Integer);
procedure TAmplifier.SetVolume(aLevel: Integer);182
 begin
begin183
 Writeln(FDescription +  ' setting volume to ' , aLevel);
  Writeln(FDescription +  ' setting volume to ' , aLevel);184
 end;
end;185

186
 function TAmplifier.ToString: String;
function TAmplifier.ToString: String;187
 begin
begin188
 Result := FDescription;
  Result := FDescription;189
 end;
end;190

191
 { TTuner }
{ TTuner }192

193
 constructor TTuner.Create(aDescription: String; aAmplifier: TAmplifier);
constructor TTuner.Create(aDescription: String; aAmplifier: TAmplifier);194
 begin
begin195
 FDescription := aDescription;
  FDescription := aDescription;196
 FAmplifier   := aAmplifier;
  FAmplifier   := aAmplifier;197
 end;
end;198

199
 procedure TTuner.Off;
procedure TTuner.Off;200
 begin
begin201
 Writeln(FDescription + ' off');
  Writeln(FDescription + ' off');202
 end;
end;203

204
 procedure TTuner.Open;
procedure TTuner.Open;205
 begin
begin206
 Writeln(FDescription + ' on');
  Writeln(FDescription + ' on');207
 end;
end;208

209
 procedure TTuner.SetAm;
procedure TTuner.SetAm;210
 begin
begin211
 Writeln(FDescription + ' setting AM mode');
  Writeln(FDescription + ' setting AM mode');212
 end;
end;213

214
 procedure TTuner.SetFm;
procedure TTuner.SetFm;215
 begin
begin216
 Writeln(FDescription + ' setting FM mode');
  Writeln(FDescription + ' setting FM mode');217
 end;
end;218

219
 procedure TTuner.SetFrequency(aFrequency: Double);
procedure TTuner.SetFrequency(aFrequency: Double);220
 begin
begin221
 Writeln(FDescription + ' setting frequency to ', aFrequency);
  Writeln(FDescription + ' setting frequency to ', aFrequency);222
 FFrequency := aFrequency;
  FFrequency := aFrequency;223
 end;
end;224

225
 function TTuner.ToString: String;
function TTuner.ToString: String;226
 begin
begin227
 Result := FDescription;
  Result := FDescription;228
 end;
end;229

230
 { TCDPlayer }
{ TCDPlayer }231

232
 constructor TCDPlayer.Create(aDescription: String; aAmplifier: TAmplifier);
constructor TCDPlayer.Create(aDescription: String; aAmplifier: TAmplifier);233
 begin
begin234
 FDescription := aDescription;
  FDescription := aDescription;235
 FAmplifier   := aAmplifier;
  FAmplifier   := aAmplifier;236
 end;
end;237

238
 procedure TCDPlayer.Eject;
procedure TCDPlayer.Eject;239
 begin
begin240
 FTitle := '';
  FTitle := '';241
 Writeln(FDescription + ' eject');
  Writeln(FDescription + ' eject');242
 end;
end;243

244
 procedure TCDPlayer.Off;
procedure TCDPlayer.Off;245
 begin
begin246
 Writeln(FDescription + ' off');
  Writeln(FDescription + ' off');247
 end;
end;248

249
 procedure TCDPlayer.Open;
procedure TCDPlayer.Open;250
 begin
begin251
 Writeln(FDescription + ' on');
  Writeln(FDescription + ' on');252
 end;
end;253

254
 procedure TCDPlayer.Pause;
procedure TCDPlayer.Pause;255
 begin
begin256
 Writeln(FDescription + ' paused <' + FTitle + '>');
  Writeln(FDescription + ' paused <' + FTitle + '>');257
 end;
end;258

259
 procedure TCDPlayer.Play(aTitle: String);
procedure TCDPlayer.Play(aTitle: String);260
 begin
begin261
 FTitle := aTitle;
  FTitle := aTitle;262
 FCurrentTrack := 0;
  FCurrentTrack := 0;263
 Writeln(FDescription + ' playing <' + FTitle + '>');
  Writeln(FDescription + ' playing <' + FTitle + '>');264
 end;
end;265

266
 procedure TCDPlayer.Play(aTrack: Integer);
procedure TCDPlayer.Play(aTrack: Integer);267
 begin
begin268
 if FTitle = '' then
  if FTitle = '' then269
 begin
    begin270
 Writeln(FDescription + ' can'' t play track ', aTrack, ', no CD inserted');
      Writeln(FDescription + ' can'' t play track ', aTrack, ', no CD inserted');271
 end
    end272
 else
  else273
 begin
    begin274
 FCurrentTrack := aTrack;
      FCurrentTrack := aTrack;275
 Writeln(FDescription + ' playing track ', FCurrentTrack);
      Writeln(FDescription + ' playing track ', FCurrentTrack);276
 end;
    end;277
 end;
end;278

279
 procedure TCDPlayer.Stop;
procedure TCDPlayer.Stop;280
 begin
begin281
 FCurrentTrack := 0;
  FCurrentTrack := 0;282
 Writeln(FDescription + ' stopped');
  Writeln(FDescription + ' stopped');283
 end;
end;284

285
 function TCDPlayer.ToString: String;
function TCDPlayer.ToString: String;286
 begin
begin287
 Result := FDescription;
  Result := FDescription;288
 end;
end;289

290
 { TDVDPlayer }
{ TDVDPlayer }291

292
 constructor TDVDPlayer.Create(aDescription: String; aAmplifier: TAmplifier);
constructor TDVDPlayer.Create(aDescription: String; aAmplifier: TAmplifier);293
 begin
begin294
 FDescription := aDescription;
  FDescription := aDescription;295
 FAmplifier   := aAmplifier;
  FAmplifier   := aAmplifier;296
 end;
end;297

298
 procedure TDVDPlayer.Eject;
procedure TDVDPlayer.Eject;299
 begin
begin300
 Writeln(FDescription + ' eject');
  Writeln(FDescription + ' eject');301
 end;
end;302

303
 procedure TDVDPlayer.Off;
procedure TDVDPlayer.Off;304
 begin
begin305
 Writeln(FDescription + ' off');
  Writeln(FDescription + ' off');306
 end;
end;307

308
 procedure TDVDPlayer.Open;
procedure TDVDPlayer.Open;309
 begin
begin310
 Writeln(FDescription + ' on');
  Writeln(FDescription + ' on');311
 end;
end;312

313
 procedure TDVDPlayer.Pause;
procedure TDVDPlayer.Pause;314
 begin
begin315
 Writeln(FDescription + ' paused <' + FMovie + '>');
  Writeln(FDescription + ' paused <' + FMovie + '>');316
 end;
end;317

318
 procedure TDVDPlayer.Play(aTrack: Integer);
procedure TDVDPlayer.Play(aTrack: Integer);319
 begin
begin320
 if FMovie = '' then
  if FMovie = '' then321
 begin
    begin322
 Writeln(FDescription + ' can'' t play track ', aTrack, ', no DVD inserted');
      Writeln(FDescription + ' can'' t play track ', aTrack, ', no DVD inserted');323
 end
    end324
 else
  else325
 begin
    begin326
 FCurrentTrack := aTrack;
      FCurrentTrack := aTrack;327
 Writeln(FDescription + ' playing track ', FCurrentTrack, ' of <', FMovie, '>');
      Writeln(FDescription + ' playing track ', FCurrentTrack, ' of <', FMovie, '>');328
 end;
    end;329
 end;
end;330

331
 procedure TDVDPlayer.Play(aMovie: String);
procedure TDVDPlayer.Play(aMovie: String);332
 begin
begin333
 FMovie := aMovie;
  FMovie := aMovie;334
 FCurrentTrack := 0;
  FCurrentTrack := 0;335
 Writeln(FDescription + ' playing <' + FMovie + '>');
  Writeln(FDescription + ' playing <' + FMovie + '>');336
 end;
end;337

338
 procedure TDVDPlayer.SetSurroundAudio;
procedure TDVDPlayer.SetSurroundAudio;339
 begin
begin340
 Writeln(FDescription + ' set surround audio');
  Writeln(FDescription + ' set surround audio');341
 end;
end;342

343
 procedure TDVDPlayer.SetTwoChannelAudio;
procedure TDVDPlayer.SetTwoChannelAudio;344
 begin
begin345
 Writeln(FDescription + ' set two channel audio');
  Writeln(FDescription + ' set two channel audio');346
 end;
end;347

348
 procedure TDVDPlayer.Stop;
procedure TDVDPlayer.Stop;349
 begin
begin350
 FCurrentTrack := 0;
  FCurrentTrack := 0;351
 Writeln(FDescription + ' <' + FMovie + '> stopped');
  Writeln(FDescription + ' <' + FMovie + '> stopped');352
 end;
end;353

354
 function TDVDPlayer.ToString: String;
function TDVDPlayer.ToString: String;355
 begin
begin356
 Result := FDescription;
  Result := FDescription;357
 end;
end;358

359
 { TScreen }
{ TScreen }360

361
 constructor TScreen.Create(aDescription: String);
constructor TScreen.Create(aDescription: String);362
 begin
begin363
 FDescription := aDescription;
  FDescription := aDescription;364
 end;
end;365

366
 procedure TScreen.Down;
procedure TScreen.Down;367
 begin
begin368
 Writeln(FDescription, ' going down');
  Writeln(FDescription, ' going down');369
 end;
end;370

371
 function TScreen.ToString: String;
function TScreen.ToString: String;372
 begin
begin373
 Result := FDescription;
  Result := FDescription;374
 end;
end;375

376
 procedure TScreen.UP;
procedure TScreen.UP;377
 begin
begin378
 Writeln(FDescription, ' going up');
  Writeln(FDescription, ' going up');379
 end;
end;380

381
 { TPopcornPopper }
{ TPopcornPopper }382

383
 constructor TPopcornPopper.Create(aDescription: String);
constructor TPopcornPopper.Create(aDescription: String);384
 begin
begin385
 FDescription := aDescription;
  FDescription := aDescription;386
 end;
end;387

388
 procedure TPopcornPopper.Off;
procedure TPopcornPopper.Off;389
 begin
begin390
 Writeln(FDescription, ' off');
  Writeln(FDescription, ' off');391
 end;
end;392

393
 procedure TPopcornPopper.Open;
procedure TPopcornPopper.Open;394
 begin
begin395
 Writeln(FDescription, ' on');
  Writeln(FDescription, ' on');396
 end;
end;397

398
 procedure TPopcornPopper.Pop;
procedure TPopcornPopper.Pop;399
 begin
begin400
 Writeln(FDescription, ' popping popcorn!');
  Writeln(FDescription, ' popping popcorn!');401
 end;
end;402

403
 function TPopcornPopper.ToString: String;
function TPopcornPopper.ToString: String;404
 begin
begin405
 Result := FDescription;
  Result := FDescription;406
 end;
end;407

408
 { TTheaterLights }
{ TTheaterLights }409

410
 constructor TTheaterLights.Create(aDescription: String);
constructor TTheaterLights.Create(aDescription: String);411
 begin
begin412
 FDescription := aDescription;
  FDescription := aDescription;413
 end;
end;414

415
 procedure TTheaterLights.Dim(aLevel: Integer);
procedure TTheaterLights.Dim(aLevel: Integer);416
 begin
begin417
 Writeln(FDescription, ' dimming to ', aLevel, '%');
  Writeln(FDescription, ' dimming to ', aLevel, '%');418
 end;
end;419

420
 procedure TTheaterLights.Off;
procedure TTheaterLights.Off;421
 begin
begin422
 Writeln(FDescription, ' off');
  Writeln(FDescription, ' off');423
 end;
end;424

425
 procedure TTheaterLights.Open;
procedure TTheaterLights.Open;426
 begin
begin427
 Writeln(FDescription, ' on');
  Writeln(FDescription, ' on');428
 end;
end;429

430
 function TTheaterLights.ToString: String;
function TTheaterLights.ToString: String;431
 begin
begin432
 Result := FDescription;
  Result := FDescription;433
 end;
end;434

435
 { TProjector }
{ TProjector }436

437
 constructor TProjector.Create(aDescription: String; aDVD: TDVDPlayer);
constructor TProjector.Create(aDescription: String; aDVD: TDVDPlayer);438
 begin
begin439
 FDescription := aDescription;
  FDescription := aDescription;440
 FDVD := aDVD;
  FDVD := aDVD;441
 end;
end;442

443
 procedure TProjector.Off;
procedure TProjector.Off;444
 begin
begin445
 Writeln(FDescription, ' off');
  Writeln(FDescription, ' off');446
 end;
end;447

448
 procedure TProjector.Open;
procedure TProjector.Open;449
 begin
begin450
 Writeln(FDescription, ' on');
  Writeln(FDescription, ' on');451
 end;
end;452

453
 function TProjector.ToString: String;
function TProjector.ToString: String;454
 begin
begin455
 Result := FDescription;
  Result := FDescription;456
 end;
end;457

458
 procedure TProjector.TVMode;
procedure TProjector.TVMode;459
 begin
begin460
 Writeln(FDescription + ' in tv mode (4x3 aspect ratio)');
  Writeln(FDescription + ' in tv mode (4x3 aspect ratio)');461
 end;
end;462

463
 procedure TProjector.WideScreenMode;
procedure TProjector.WideScreenMode;464
 begin
begin465
 Writeln(FDescription + ' in widescreen mode (16x9 aspect ratio)');
  Writeln(FDescription + ' in widescreen mode (16x9 aspect ratio)');466
 end;
end;467

468
 end.
end.

 简洁的门面接口
简洁的门面接口1
 unit uFacadeObject;
unit uFacadeObject;2

3
 interface
interface4

5
 uses
uses6
 uSubObject;
  uSubObject;7

8
 type
type9
 THomeTheaterFacade = class(TObject)
  THomeTheaterFacade = class(TObject)10
 private
  private11
 FAmp: TAmplifier;
    FAmp: TAmplifier;12
 FTuner: TTuner;
    FTuner: TTuner;13
 FDVD: TDVDPlayer;
    FDVD: TDVDPlayer;14
 FCD: TCDPlayer;
    FCD: TCDPlayer;15
 FProjector: TProjector;
    FProjector: TProjector;16
 FLights: TTheaterLights;
    FLights: TTheaterLights;17
 FScreen: TScreen;
    FScreen: TScreen;18
 FPopper: TPopcornPopper;
    FPopper: TPopcornPopper;19
 public
  public20
 constructor Create(aAmp   : TAmplifier;
    constructor Create(aAmp   : TAmplifier;21
 aTuner : TTuner;
                       aTuner : TTuner;22
 aDVD   : TDVDPlayer;
                       aDVD   : TDVDPlayer;23
 aCD    : TCDPlayer;
                       aCD    : TCDPlayer;24
 aProjector: TProjector;
                       aProjector: TProjector;25
 aLights: TTheaterLights;
                       aLights: TTheaterLights;26
 aScreen: TScreen;
                       aScreen: TScreen;27
 aPopper: TPopcornPopper);
                       aPopper: TPopcornPopper);28
 procedure WatchMovie(aMovie: String);
    procedure WatchMovie(aMovie: String);29
 procedure EndMovie;
    procedure EndMovie;30
 procedure ListenToCD(CDTitle: String);
    procedure ListenToCD(CDTitle: String);31
 procedure EndCD;
    procedure EndCD;32
 procedure ListenToRadio(aFrequency: Double);
    procedure ListenToRadio(aFrequency: Double);33
 procedure EndRadio;
    procedure EndRadio;34
 end;
  end;35

36
 implementation
implementation37

38
 { THomeTheaterFacade }
{ THomeTheaterFacade }39

40
 constructor THomeTheaterFacade.Create(aAmp   : TAmplifier;
constructor THomeTheaterFacade.Create(aAmp   : TAmplifier;41
 aTuner : TTuner;
                                      aTuner : TTuner;42
 aDVD   : TDVDPlayer;
                                      aDVD   : TDVDPlayer;43
 aCD    : TCDPlayer;
                                      aCD    : TCDPlayer;44
 aProjector: TProjector;
                                      aProjector: TProjector;45
 aLights: TTheaterLights;
                                      aLights: TTheaterLights;46
 aScreen: TScreen;
                                      aScreen: TScreen;47
 aPopper: TPopcornPopper);
                                      aPopper: TPopcornPopper);48
 begin
begin49
 FAmp    := aAmp;
  FAmp    := aAmp;50
 FTuner  := aTuner;
  FTuner  := aTuner;51
 FDVD    := aDVD;
  FDVD    := aDVD;52
 FCD     := aCD;
  FCD     := aCD;53
 FProjector := aProjector;
  FProjector := aProjector;54
 FLights := aLights;
  FLights := aLights;55
 FScreen := aScreen;
  FScreen := aScreen;56
 FPopper := aPopper;
  FPopper := aPopper;57
 end;
end;58

59
 procedure THomeTheaterFacade.EndCD;
procedure THomeTheaterFacade.EndCD;60
 begin
begin61
 Writeln('Shutting down CD
  Writeln('Shutting down CD ');
');62
 FAmp.Off;
  FAmp.Off;63
 FAmp.SetCD(FCD);
  FAmp.SetCD(FCD);64
 FCD.Eject;
  FCD.Eject;65
 FCD.Off;
  FCD.Off;66
 end;
end;67

68
 procedure THomeTheaterFacade.EndMovie;
procedure THomeTheaterFacade.EndMovie;69
 begin
begin70
 Writeln('Shutting movie theater down
  Writeln('Shutting movie theater down ');
');71
 FPopper.Off;
  FPopper.Off;72
 FLights.Open;
  FLights.Open;73
 FScreen.UP;
  FScreen.UP;74
 FProjector.Off;
  FProjector.Off;75
 FAmp.Off;
  FAmp.Off;76
 FDVD.Stop;
  FDVD.Stop;77
 FDVD.Eject;
  FDVD.Eject;78
 FDVD.Off;
  FDVD.Off;79
 end;
end;80

81
 procedure THomeTheaterFacade.EndRadio;
procedure THomeTheaterFacade.EndRadio;82
 begin
begin83
 Writeln('Shutting down the tuner
  Writeln('Shutting down the tuner ');
');84
 FTuner.Off;
  FTuner.Off;85
 FAmp.Off;
  FAmp.Off;86
 end;
end;87

88
 procedure THomeTheaterFacade.ListenToCD(CDTitle: String);
procedure THomeTheaterFacade.ListenToCD(CDTitle: String);89
 begin
begin90
 Writeln('Get ready for an audiopile experence
  Writeln('Get ready for an audiopile experence ');
');91
 FLights.Open;
  FLights.Open;92
 FAmp.Open;
  FAmp.Open;93
 FAmp.SetVolume(5);
  FAmp.SetVolume(5);94
 FAmp.SetCD(FCD);
  FAmp.SetCD(FCD);95
 FAmp.SetStereoSound;
  FAmp.SetStereoSound;96
 FCD.Open;
  FCD.Open;97
 FCD.Play(CDTitle);
  FCD.Play(CDTitle);98
 end;
end;99

100
 procedure THomeTheaterFacade.ListenToRadio(aFrequency: Double);
procedure THomeTheaterFacade.ListenToRadio(aFrequency: Double);101
 begin
begin102
 Writeln('Tuning in the airwaves
  Writeln('Tuning in the airwaves ');
');103
 FTuner.Open;
  FTuner.Open;104
 FTuner.SetFrequency(aFrequency);
  FTuner.SetFrequency(aFrequency);105
 FAmp.Open;
  FAmp.Open;106
 FAmp.SetVolume(5);
  FAmp.SetVolume(5);107
 FAmp.SetTuner(FTuner);
  FAmp.SetTuner(FTuner);108
 end;
end;109

110
 procedure THomeTheaterFacade.WatchMovie(aMovie: String);
procedure THomeTheaterFacade.WatchMovie(aMovie: String);111
 begin
begin112
 Writeln('Get ready to watch a movie
  Writeln('Get ready to watch a movie ');
');113
 FPopper.Open;
  FPopper.Open;114
 FPopper.Pop;
  FPopper.Pop;115
 FLights.Dim(10);
  FLights.Dim(10);116
 FScreen.Down;
  FScreen.Down;117
 FProjector.Open;
  FProjector.Open;118
 FProjector.WideScreenMode;
  FProjector.WideScreenMode;119
 FAmp.Open;
  FAmp.Open;120
 FAmp.SetDVD(FDVD);
  FAmp.SetDVD(FDVD);121
 FAmp.SetSurroundSound;
  FAmp.SetSurroundSound;122
 FAmp.SetVolume(5);
  FAmp.SetVolume(5);123
 FDVD.Open;
  FDVD.Open;124
 FDVD.Play(aMovie);
  FDVD.Play(aMovie);125
 end;
end;126

127
 end.
end.

 客户端
客户端1
 program pHomeTheaterTestDrive;
program pHomeTheaterTestDrive;2

3
 {$APPTYPE CONSOLE}
{$APPTYPE CONSOLE}4

5
 uses
uses6
 SysUtils,
  SysUtils,7
 uFacadeObject in 'uFacadeObject.pas',
  uFacadeObject in 'uFacadeObject.pas',8
 uSubObject in 'uSubObject.pas';
  uSubObject in 'uSubObject.pas';9

10
 var
var11
 Amp   : TAmplifier;
  Amp   : TAmplifier;12
 Tuner : TTuner;
  Tuner : TTuner;13
 DVD   : TDVDPlayer;
  DVD   : TDVDPlayer;14
 CD    : TCDPlayer;
  CD    : TCDPlayer;15
 Projector: TProjector;
  Projector: TProjector;16
 Lights: TTheaterLights;
  Lights: TTheaterLights;17
 Screen: TScreen;
  Screen: TScreen;18
 Popper: TPopcornPopper;
  Popper: TPopcornPopper;19

20
 HomeTheater: THomeTheaterFacade;
  HomeTheater: THomeTheaterFacade;21
 
   22
 begin
begin23
 Amp    := TAmplifier.Create('Top-O-Line Amplifier');
  Amp    := TAmplifier.Create('Top-O-Line Amplifier');24
 Tuner  := TTuner.Create('Top-O-Line AM/FM Tuner', Amp);
  Tuner  := TTuner.Create('Top-O-Line AM/FM Tuner', Amp);25
 DVD    := TDVDPlayer.Create('Top-O-Line DVD Player', Amp);
  DVD    := TDVDPlayer.Create('Top-O-Line DVD Player', Amp);26
 CD     := TCDPlayer.Create('Top-O-Line CD Player', Amp);
  CD     := TCDPlayer.Create('Top-O-Line CD Player', Amp);27
 Projector := TProjector.Create('Top-O-Line Projector', DVD);
  Projector := TProjector.Create('Top-O-Line Projector', DVD);28
 Lights := TTheaterLights.Create('Theater Ceiling Lights');
  Lights := TTheaterLights.Create('Theater Ceiling Lights');29
 Screen := TScreen.Create('Theater Screen');
  Screen := TScreen.Create('Theater Screen');30
 Popper := TPopcornPopper.Create('Popcorn Popper');
  Popper := TPopcornPopper.Create('Popcorn Popper');31

32
 HomeTheater := THomeTheaterFacade.Create(Amp, Tuner, DVD, CD, Projector,
  HomeTheater := THomeTheaterFacade.Create(Amp, Tuner, DVD, CD, Projector,33
 Lights, Screen, Popper);
                                           Lights, Screen, Popper);34

35
 HomeTheater.WatchMovie('Raiders of the Lost Ark');
  HomeTheater.WatchMovie('Raiders of the Lost Ark');36
 Writeln;
  Writeln;37
 HomeTheater.EndMovie;
  HomeTheater.EndMovie;38

39
 FreeAndNil(Amp);
  FreeAndNil(Amp);40
 FreeAndNil(Tuner);
  FreeAndNil(Tuner);41
 FreeAndNil(DVD);
  FreeAndNil(DVD);42
 FreeAndNil(CD);
  FreeAndNil(CD);43
 FreeAndNil(Projector);
  FreeAndNil(Projector);44
 FreeAndNil(Lights);
  FreeAndNil(Lights);45
 FreeAndNil(Screen);
  FreeAndNil(Screen);46
 FreeAndNil(Popper);
  FreeAndNil(Popper);47
 FreeAndNil(HomeTheater);
  FreeAndNil(HomeTheater);48

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