Factory als Singleton - in diesem Fall vermeidbar?



  • Es geht mir um eine Design-Frage wie ich ein Pattern eingesetzt habe.
    Ich habe sehr viele Klassen und eine Factory. Die Factory liefert teils Referenzen auf existierende Objekte wie Logbuch, Texturen, bestehende Windows-Fenster etc nach draussen an den User dieser Factory (ein Programm) und teils auch neue Objekte die über die Factory generiert werden. Damit bestehende Logbücher aber offen bleiben, ist diese Klasse ein Singleton und die Klasse Logbuch ein Member dieser Factory. So kann ich im Programm (User der API) bequem auf diese Informationen zugreifen. Da geht es auch um Dinge wie Bildschirmgröße, vorhandene Texturen etc.

    Jetzt die Frage hierzu:
    Lässt es sich irgendwie vermeiden dass diese Factory als Singleton aufgestellt ist? Wie könnte man im resultierenden Programm das lösen?
    Wenn man nun diese Factory in der "Hauptklasse" oder main() des Programmes erstellt, müsste man diese Factory ja wieder an alle anderen Klassen weiterleiten. Dinge wie das Logbuch müssen eben zentral bestehen, damit in der Reihenfolge reingeschrieben werden kann, wie die Nachrichten eingehen. Oder sollte man während des Betriebes immer wieder öffnen und schliessen und quasi in der Logbuchklasse mit append arbeiten? Würde man diese Funktionen statisch machen, wäre es ja quasi auch ein einzelnes Singleton.

    Nicht dass mich das Singleton stört, aber ich würde gerne wissen wie hier Profis an die Sache rangehen. Wenn Ihr so nett seid und mich da informiert natürlich :).
    rya.



  • Wieso ist das Logbuch kein Singleton?



  • Weil ziemlich viele Informationen ständig verfügbar sein sollten bzw müssen wie Größe des Fensters/der Fenster, geladene Resourcen etc. Da müssen viele Klassen darauf zugreifen wie GUI-Klassen, damit sie ihren Inhalt ordentlich positionieren können.
    Da war meine Entscheidung halt alles in eine Factory zu packen die als Singleton dient und diese Informationen bereithält, bzw Referenzen der Klassen die verwendet werden.
    Was vorgehalten wird:
    1 Logbuch, Offene Fenster, Resourcen-Manager mit Informationen über geladenene Dateien (welcher die Referenzen auf geladene Resourcen liefert).
    Ich hab halt nur entsprechende Kritik bekommen dass das so schlechtes Design wäre, aber ich habe die Befürchtung, dass ich hier mit einem Forenpost nicht viel erreiche, da ich kaum Code posten kann, da ich ja die ganzen Struktur hier darlegen müsste :D. Und das wäre glaub ich bei mehr als ~300.000 Zeilen Code etwas zuviel... 🤡
    rya.



  • Scorcher24 schrieb:

    alles in eine Factory zu packen

    Alles an einem Ort zu lagern ist zwar für ordnungsliebende Menschen verlockend,
    aber selten gutes Design. Wer nur wissen will, wie groß der Bildschirm ist, braucht keinen Zugriff auf ein Logbuch. Normalerweise gibt man einer Klasse/Funktion/... so wenig Verantwortlichkeiten/Zuständigkeiten wie möglich.
    Wenn deine Factory nur ein Singleton ist, weil das Logbuch einmalig ist ist das schlecht. Wieso dann nicht einfach das Logbuch als Singleton implementieren (oder darüber nachdenken ohne Singleton auszukommen) ?


Anmelden zum Antworten