Wenn Sie ein Objekt haben, das in Ihrem Programm einzigartig ist und an vielen Stellen verwendet wird, haben Sie mehrere Möglichkeiten:
-
überall einen Verweis auf das Objekt übergeben
-
ein mehr oder weniger gut verstecktes Global verwenden (Singleton, Mono-State, ...)
Jeder Ansatz hat seine Nachteile. Sie sind ziemlich gut kommentiert und einige haben sehr starke Meinungen zu diesen Themen (suchen Sie nach "singleton anti-pattern"). Ich werde nur einige von ihnen geben, und nicht versuchen, vollständig zu sein.
-
Die Weitergabe eines Verweises ist mühsam und wirft den Code durcheinander; also behält man diese Verweise in einem langlebigen Objekt, um die Anzahl der Parameter zu verringern. Wenn der Zeitpunkt kommt, an dem das "einzigartige" Objekt nicht mehr einzigartig ist, sind Sie dann bereit? Nein: Sie haben mehrere Pfade zu dem eindeutigen Objekt und werden feststellen, dass sie sich nun auf verschiedene Objekte beziehen und inkonsistent verwendet werden. Die Fehlersuche kann ein Alptraum sein, schlimmer noch als die Änderung des Codes von einem globalen Ansatz zu einem weitergegebenen Ansatz, und das Schlimmste war in den Zeitplänen nicht eingeplant, als der Code fertig war.
-
globale Probleme wie das der Annäherung sind sogar noch bekannter. Sie führen versteckte Abhängigkeiten ein (so dass die Wiederverwendung von Komponenten schwieriger ist), unerwartete Nebeneffekte (es ist schwieriger, das richtige Verhalten zu erreichen, die Behebung eines Fehlers irgendwo löst einen Fehler in einer anderen Komponente aus), das Testen ist komplizierter, ...
In Ihrem Fall ist der Besitz einer Steckdose an sich nichts Besonderes. Die Wahrscheinlichkeit, dass Sie einen anderen Sockel in Ihrem Programm verwenden oder die Komponenten irgendwo wiederverwenden müssen, wo dieser Sockel nicht mehr einzigartig ist, scheint ziemlich hoch zu sein. Ich würde mich nicht für einen globalen Ansatz entscheiden, sondern für einen parametrisierten. Beachten Sie, dass, wenn Ihr Socket an sich einzigartig ist - wie z.B. bei der Protokollierung über das Netzwerk - Sie ihn besser in einem Objekt kapseln sollten, das für diesen Zweck entwickelt wurde. Zum Beispiel Logging. Und dann könnte es Sinn machen, eine globale Funktion zu verwenden.