AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Überprüfen ob ein Objekt existiert aber wie?

Überprüfen ob ein Objekt existiert aber wie?

Ein Thema von Schuster · begonnen am 3. Jan 2005 · letzter Beitrag vom 27. Dez 2020
 
Benutzerbild von Sir Rufo
Sir Rufo

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

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
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz