Wo ist der unterschied zwischen einem 'zwangsweise' einmalig erzeugtem Objekt und einem, das per Konvention nur einmal erstellt wird (Form1, Application etc.)?
Beispiel: Ein Datenmodul wird nur einmal instantiiert und verwendet, obwohl es problemlos mehrere Instanzen geben könnte. Eine Singleton-Klasse dagegen sorgt dafür, das man nicht mehrere Instanzen erstellen *kann*.
Unterm Strich kommt jedoch das Gleiche heraus und 'zu warten' gibt es da nicht viel.
PS: Ich habe deine Variante (#8) vor einiger Zeit mal umgesetzt: Für mich war das sehr umständlich und auch unnötig.
Da ist mir meine Variante (die das Singleton-Verhalten komplett kapselt) allemal lieber. Dies ist auch gängige Praxis in anderen
OOP-Sprachen. Ich kenne das z.B. von log4net (ein Logger für C#): Dort, wo man einen Logger benötigt, holt (=instantiiert) man sich mal eben einen. Ob das ein Singleton ist oder nicht, weiß ich nicht und es interessiert mich auch nicht.
Erkläre mir doch mal, was Du unter 'ein Singleton-Objekt warten' verstehst.