Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Nicht gestarteter TThread wird nicht beendet - Verständnisproblem: Thread und Ev

  Alt 12. Mär 2015, 09:34
Hallo Blup,

vielen Dank für die Anregung.
Da es sich aber irgendwie falsch anfühlt, dass die HardwareAnsteuerungsFactory sowohl darüber entscheidet, welche Art von Ansteuerung verwendet wird, als auch die Waschmaschinen kennt und erzeugt, habe ich die Register-Methode in eine eigene WaschmaschinenFactory ausgelagert.
Es erscheint mir noch flexibler zu sein.

Noch ein bisschen unzufrieden bin ich mit dem Punkt, den der Günther erwähnt hat.
Ich veranlasse das Erzeugen im AfterConstruction des Waschsalons und bin damit jeder Exception schutzlos ausgeliefert.
Es wäre wohl besser dem Befehl des Erzeugens eine Ebene höher explizit auszuführen.
Hier im Beispiel also in der procedure Main nach dem Erzeugen des Waschsalons.

Was denkt ihr?
Im Anhang der aktuelle Stand.

Delphi-Quellcode:
  IWaschsalon = interface
    ['{240F248A-E379-44B3-ADBA-B08B3DE26567}']
    function GibtWaschmaschineMitDerNummer(WaschmaschinenNummer : Integer) : IWaschmaschine;
    function GetCount: Integer;
    function GetMaxWaschmaschinen : Integer;
    procedure RegisterWaschmaschine(const AWaschmaschine: IWaschmaschine);

    property MaxWaschmaschinen : Integer read GetMaxWaschmaschinen;
    property Count : Integer read GetCount;
  end;

...

  TWaschmaschinenFactory = class abstract
    class procedure RegisterWaschmaschinen(const AWaschsalon: IWaschsalon);
  end;

...

class procedure TWaschmaschinenFactory.RegisterWaschmaschinen(const AWaschsalon: IWaschsalon);
var
  Waschmaschine: IWaschmaschine;
  HardwareAnsteuerung : IHardwareAnsteuerung;
  I : Integer;
begin
  THardwareAnsteuerungFactory.GetHardwareAnsteuerung(HardwareAnsteuerung);

  for I := 0 to AWaschsalon.MaxWaschmaschinen - 1 do
  begin
    Waschmaschine := TWaschmaschine.Create(HardwareAnsteuerung);
    AWaschsalon.RegisterWaschmaschine(Waschmaschine);
  end;
end;

...

procedure TWaschsalon.AfterConstruction;
begin
  inherited;
  FWaschmaschinenListe := TList<IWaschmaschine>.Create;

  FülleWaschmaschinenListe;
end;

...

procedure TWaschsalon.FülleWaschmaschinenListe;
begin
  TWaschmaschinenFactory.RegisterWaschmaschinen(Self);
end;
Angehängte Dateien
Dateityp: zip Waschsalon.zip (1,7 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat