AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Factory Pattern

Ein Thema von Turtle85 · begonnen am 23. Mai 2019 · letzter Beitrag vom 23. Mai 2019
Antwort Antwort
Turtle85

Registriert seit: 23. Mai 2019
4 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Factory Pattern

  Alt 23. Mai 2019, 07:58
Aloah...

ich habe mich in letzter Zeit ein wenig mit den verschiedenen Software Pattern beschäftigt. Unter anderem auch mit dem Factory Pattern. Im Internet habe ich hierzu mehrere Beispiele und Erklärungen gefunden. Anhand dieser Beispiele unter Erklärungen habe ich versucht ein eigenes Beispiel zu programmieren.

Mich würde nun Interessieren ob in meinem Beispiel das Factory Pattern korrekt umgesetzt ist (oder auch nicht) und ob Verbesserungen vorgenommen werden müssten.

Nach meinem Verständnis geht es beim Factory Pattern ja darum, dass der Client (in meinem Fall soll dies die Klasse TAppStore sein) keine Ahnung von dem Konkreten Produkt (TSoftwareApp und deren Ableitungen) hat mit dem er arbeiten soll. Das Konkrete Produkt bekommt er ja über eine Subklasse (in meinem Fall die Klassen TOfficeApps / TAppleApps) erstellt/mitgeteilt, die für Ihn das konkrete Produkt erstellt.

Die Klassenstruktur habe ich als Anhang diesem Post hinzugefügt.


Anbei noch eine beispielhafte implementierung:

Delphi-Quellcode:
procedure TfrmPattern.DoFactoryPattern;
var
  SL : TStringList;
  Store : TAppStore;
begin
  SL := TStringList.Create;
  try
    Store := TAppStore.Create(astMicrosoft);
    try
      try
        Store.BuySoftwareApp(atText, SL);
      except
        on E:Exception do
          MessageDlg(E.Message, mtError, [mbOk], 0);
      end;
      try
      Store.BuySoftwareApp(atPresentation, SL);
      except
        on E:Exception do
          MessageDlg(E.Message, mtError, [mbOk], 0);
      end;
    finally
      Store.Free;
    end;
    ShowMessage(SL.Text);
  finally
    SL.Free;
  end;
end;

Wie bereits erwähnt würde micht Eure Meinung zur Art und Weise meiner Umsetzung interessieren...
Angehängte Dateien
Dateityp: pas FactoryPattern.pas (7,6 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
2.094 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Factory Pattern

  Alt 23. Mai 2019, 08:17
Macht generell mehr Sinn zusammen mit Interfaces.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
4.970 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Factory Pattern

  Alt 23. Mai 2019, 08:37
Wenn es eine Factory ist, dann nenn es doch auch im Code so 😉

TSoftwareApps -> TAppFactory
TAppleApps -> TAppFactoryApple
TOfficeApps -> TAppFactoryMicrosoft

Das Beispiel mit dem Office-Programmen kommt mir bekannt vor.

Du bist wirklich ein Freund von enums. Mein persönlicher Geschmack wäre es nicht. Für mich ist es noch zu früh am morgen, aber spontan denke ich dass man mit einem
Code:
TAppFactory
------------
+ createCalculation(): TSoftwareApp
+ createPresentation(): TSoftwareApp
(...)
besser fährt als mit
Code:
TAppFactory
----------
+ createApp(enum TAppType): TSoftwareApp

Grade wenn man beispielsweise von deinem TAppleApps oder TOfficeApps weitere Unterklassen bilden würde (z.B. TOfficeEvaluationApps das nur Demo-Versionen liefert) müsste man die Case-Statements aus der Überklasse mitschleppen, kopieren, abändern. Fehleranfällig wenn da später geändert wird. Hat man einzelne Methoden für jeden Typ hat man das Problem nicht.


Bzgl. Testbarkeit würde ich auch in der Anwendungsklasse TAppStore davon abrücken hier ein enum zu geben, sich lokal eine in TAppStore.Create(..) hartverdrahtete Factory zu erstellen. Gib ihm nicht ein Enum, gib ihm die fertige Factory.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
582 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Factory Pattern

  Alt 23. Mai 2019, 08:38
Ja.
Es würde auch Sinn machen wenn Du erläuterst was du mit "Factory Pattern" meinst. Erst dann kann man entscheiden ob es "korrekt umgesetzt ist".
Dein "Im Internet habe ich hierzu mehrere Beispiele und Erklärungen gefunden." ist etwas arg unspezifisch.
Meinst du eines von den beiden?
https://de.wikipedia.org/wiki/Abstrakte_Fabrik
https://de.wikipedia.org/wiki/Fabrikmethode
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
4.970 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Factory Pattern

  Alt 23. Mai 2019, 08:47
Aus dem Quelltext geht aufgrund der "Familie" von Office-Produkten hervor dass es die abstrakte Fabrik ist.
  Mit Zitat antworten Zitat
Turtle85

Registriert seit: 23. Mai 2019
4 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: Factory Pattern

  Alt 23. Mai 2019, 09:25
Ich hoffe der Post kommt jetzt nicht doppelt... Da ich meine Antwort aber nicht sehe, gehe ich davon aus das beim Post versuch etwas schief gelaufen ist...

Macht generell mehr Sinn zusammen mit Interfaces.
Vielen Dank für den Link. Den werde ich mir mal anschauen...

Ja.
Es würde auch Sinn machen wenn Du erläuterst was du mit "Factory Pattern" meinst. Erst dann kann man entscheiden ob es "korrekt umgesetzt ist".
Dein "Im Internet habe ich hierzu mehrere Beispiele und Erklärungen gefunden." ist etwas arg unspezifisch.
Meinst du eines von den beiden?
https://de.wikipedia.org/wiki/Abstrakte_Fabrik
https://de.wikipedia.org/wiki/Fabrikmethode
Eigentlich wollte ich eine normales "Factory Pattern" abbilden. Beim einlesen habe ich hauptsächlich mit den folgenden beiden Links gearbeitet:
https://www.philipphauer.de/study/se...ory-method.php
http://www.nickhodges.com/post/Delph...e-Factory.aspx

Das ich hierbei jetzt schon Richtung "Abstract Factory Pattern" abgedriftet bin, war mir so nicht bewusst...



Wenn es eine Factory ist, dann nenn es doch auch im Code so 😉
TSoftwareApps -> TAppFactory
TAppleApps -> TAppFactoryApple
TOfficeApps -> TAppFactoryMicrosoft
Vielen Dank für den Hinweis. Meine Klassen habe ich entsprechend deinen Vorschlägen umbenannt.


Du bist wirklich ein Freund von enums. Mein persönlicher Geschmack wäre es nicht. Für mich ist es noch zu früh am morgen, aber spontan denke ich dass man mit einem
Code:
TAppFactory
------------
+ createCalculation(): TSoftwareApp
+ createPresentation(): TSoftwareApp
(...)
besser fährt als mit
Code:
TAppFactory
----------
+ createApp(enum TAppType): TSoftwareApp
Grade wenn man beispielsweise von deinem TAppleApps oder TOfficeApps weitere Unterklassen bilden würde (z.B. TOfficeEvaluationApps das nur Demo-Versionen liefert) müsste man die Case-Statements aus der Überklasse mitschleppen, kopieren, abändern. Fehleranfällig wenn da später geändert wird. Hat man einzelne Methoden für jeden Typ hat man das Problem nicht.
Bei deinen Vorschlägen bezüglich der "Create" Methoden stehe ich grad ein wenig auf dem Schlauch...
Meinst Du es so, dass die TAppFactory nicht mehr über den Enum die zu erstellende TSoftwareApp ermittelt, sondern das eine Methode exakt die TSoftwareApp erstellt die benötigt wird? Wenn ich das so richtig Verstanden habe, an welcher Stelle muss dann geprüft bzw. entschieden werden welche TSoftwareApp erstellt werden soll?
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
582 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Factory Pattern

  Alt 23. Mai 2019, 14:28
Aus dem Quelltext geht aufgrund der "Familie" von Office-Produkten hervor dass es die abstrakte Fabrik ist.
Verstehe ich zwar nicht, aber egal. Ich verstehe nicht mal wozu mach so eine abstrakte Fabrik braucht.
Wir haben in unserer Software zig Fabriken. Wenige davon sind Fabrikmethoden, die meisten jedoch eigene Fabrikklassen. Diese sind jedoch nicht abstrakt sondern konkrete. Zur Unterscheidung gibt es einen Key, oft ist das ein enum.
Oft gibt es noch eine Registry, die konkreten Klassen registrieren sich dort mit Ihrem Key. Die Fabrik sucht dann mit dem Key in der Registry und erzeugt die entsprechenden Klasse.
  Mit Zitat antworten Zitat
Turtle85

Registriert seit: 23. Mai 2019
4 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Factory Pattern

  Alt 23. Mai 2019, 14:45
Aus dem Quelltext geht aufgrund der "Familie" von Office-Produkten hervor dass es die abstrakte Fabrik ist.
Verstehe ich zwar nicht, aber egal. Ich verstehe nicht mal wozu mach so eine abstrakte Fabrik braucht.
Wir haben in unserer Software zig Fabriken. Wenige davon sind Fabrikmethoden, die meisten jedoch eigene Fabrikklassen. Diese sind jedoch nicht abstrakt sondern konkrete. Zur Unterscheidung gibt es einen Key, oft ist das ein enum.
Oft gibt es noch eine Registry, die konkreten Klassen registrieren sich dort mit Ihrem Key. Die Fabrik sucht dann mit dem Key in der Registry und erzeugt die entsprechenden Klasse.
Hast Du hierfür mal ein Beispiel wie Ihr das abbildet?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.845 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Factory Pattern

  Alt 23. Mai 2019, 14:59
Hilft dieser Thread vielleicht weiter?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Turtle85

Registriert seit: 23. Mai 2019
4 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

AW: Factory Pattern

  Alt 23. Mai 2019, 15:44
Hilft dieser Thread vielleicht weiter?
Vielen Dank für den Link, werde ich mir morgen dann mal anschauen...
  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 01:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf