Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#28

AW: Überprüfen ob ein Objekt existiert aber wie?

  Alt 10. Jun 2013, 08:28
Also speziell in diesem Fall mit dem MediaPlayer würde ich ein Facade Design Pattern wählen.

Mal vereinfacht angenommen, der MediaPlayer soll sich nachher bedienen lassen mit den Funktionen Play, Stop, Power (zum Ein-/Ausschalten), dann würde die Facade so aussehen:
Delphi-Quellcode:
IMediaPlayerFacade = interface
  {GUID}
  procedure Play;
  procedure Stop;
  procedure Power;
end;
Eine konkrete Facade wäre dann z.B.
Delphi-Quellcode:
TMediaPlayerFacade = class( TInterfacedObject, IMediaPlayerFacade )
private
  FPlayer : TMPlayer;
protected
  procedure Play;
  procedure Stop;
  procedure Power;
end;

procedure TMediaPlayerFacade.Play;
begin
  if Assigned( FPlayer )
  then
    begin
      { Hier der Code um den Player zu starten }
    end;
end;

procedure TMediaPlayerFacade.Stop;
begin
  if Assigned( FPlayer )
  then
    begin
      { Hier der Code um den Player zu stoppen }
    end;
end;

procedure TMediaPlayerFacade.Power;
begin
  if Assigned( FPlayer )
  then
    begin
      FreeAndNil( FPlayer );
    end
  else
    begin
      FPlayer := TMPlayer.Create;
    end;
end;
Da der MediaPlayer aber nur eine Komponente von der Haussteuerung ist (nehme ich mal an), brauchen wir ein globales Steuerung-Element, wo alle anderen Facades gesammelt werden
Delphi-Quellcode:
IHausSteuerung = interface
  {GUID}
  function GetMediaPlayer : IMediaPlayerFacade;
  property MediaPlayer : IMediaPlayerFacade read GetMediaPlayer;
end;
Konkret kann das jetzt wie folgt umgesetzt werden
Delphi-Quellcode:
unit HausSteuerungSingleton;

interface

uses
  HausSteuerungIntf;

function HausSteuerung : IHausSteuerung;

implementation

uses
  MediaPlayerFacadeIntf,
  MediaPlayerFacade;

var
  _HausSteuerung : IHausSteuerung;

type
  THausSteuerung = class( TInterfacedObject, IHausSteuerung )
  private
    FMediaPlayer : IMediaPlayerFacade;
  protected
    function GetMediaPlayer : IMediaPlayerFacade;
  public
    constructor Create;
  end;

constructor THausSteuerung.Create;
begin
  inherited;
  FMediaPlayer := TMediaPlayerFacade.Create;
end;

function THausSteuerung.GetMediaPlayer : IMediaPlayerFacade;
begin
  Result := FMediaPlayer;
end;

function HausSteuerung : IHausSteuerung;
begin
  if not Assigned( _HausSteuerung )
  then
    _HausSteuerung := THausSteuerung.Create;

  Result := _HausSteuerung;
end;
Der Lohn der Mühe ist dann die vereinfachte Benutzung der Module.

3 Button auf die Form geklatscht, die Unit HausSteuerungSingleton in die implementation Uses-Liste aufnehmen und die Button-OnClick Ereignisse jeweils mit
Delphi-Quellcode:
HausSteuerung.MediaPlayer.Power;
// bzw.
HausSteuerung.MediaPlayer.PLay;
// bzw.
HausSteuerung.MediaPlayer.Stop;
verdrahten
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat