Nehmen wir an, ich habe eine Schnittstelle namens "Controller". Mehrere Klassen implementieren diese Schnittstelle und ich kenne diese Klassen nicht (z. B. befinden sich die Klassennamen in einer XML-Datei). Damit diese Controller-implementierenden Klassen funktionieren, müssen sie einige Referenzen auf andere Objekte (möglicherweise Datenobjekte) erhalten. Und das ist meine Frage, nämlich was ist der beste Weg, um solche Objekte (die Controller-Einsen) zu initialisieren?Initialisieren eines Objekts mit Referenzen ohne Zugriff auf einen nicht standardmäßigen Konstruktor
Ich dachte an mehrere Lösungen, aber ich bin nicht wirklich sicher, was ist der beste Ansatz hier.
Zuerst: Wenn ich das Objekt vom Klassennamen instanziiere, könnte ich nach dem "speziellen" Konstruktor (über Reflektion) suchen, der die Objektreferenzen hat, die das Controller-Objekt benötigt. Aber von dem, was ich in anderen Fragen gelesen habe, ist dies weniger wahrscheinlich eine gute Lösung, weil ich einen speziellen Konstruktor zwingen würde, in der Klasse zu existieren. Und manchmal lese ich, dass Reflexion im Allgemeinen böse ist und besser vermieden wird.
Sekunde: Ich füge eine spezielle init (a, b, c) -Methode zur Controller-Schnittstelle hinzu, die direkt nach der Erstellung des Objekts aufgerufen werden müsste. Dies würde eine Folge von Aufrufen (zuerst init (..), dann Ruhe) auf das Objekt zwingen, um es zum Laufen zu bringen, was wahrscheinlich auch schlecht ist. Btw, sind init() - Methoden generell eine schlechte Sache in Schnittstellen?
Dritter: Nach der Lektüre this Kommentar ich zu folgendem gedacht: Statt die Klassennamen der Klasse mit der Steuerung-Schnittstelle implementiert (in der XML-Datei) Ich habe den Klassennamen eine Fabrik, die zu der gehört konkrete Controller-Klasse. Und diese Fabrik würde eine Schnittstelle mit der Methode createController (a, b, c) implementieren und die Fabrik würde dann wissen, welche Klasse sie instanziieren müsste und welcher Konstruktor aufgerufen werden müsste, um die anderen Referenzen (wie Datenobjekte) zu übertragen. Nachteil wäre die zusätzliche Klasse, nur um die Controller-Klasse instanziieren und vielleicht ein wenig Overhead im Allgemeinen.
Was denken Sie, ist der beste Weg, dies zu tun? Oder können Sie an etwas anderes denken, das besser ist als diese drei Wege?
Danke!
Ich würde damit anfangen, darüber nachzudenken, ob diese XML-Datei wirklich das ist, was Sie tun möchten. –
Hm, irgendwie muss ich herausfinden, welche Controller-Klassen ich habe.Aber du könntest recht haben, ich habe versucht, eine Art Modulsystem zu schaffen, und ich bin immer noch ein Lernschüler, also könnte es für die Welt nicht vorzeigbar sein: P – letmaik