Háááát ööö., ez így nem oké. Nem hozhatsz létre new-val objektumot ha protected a konstruktor.
A sigleton (vagy általánosítva akárhány-ton) értelme, hogy globálisan korlátozod az adott osztályba tartozó létrejövő objektumok számát (általában egyre).
Azaz a kódodba kell egy:
private MySingleton ehh=null;
a konstruktor protected és még egy:
public static getInstance(...){
if(ehh==null) ehh= new Mysingleton(...);
/*ehh.set(...);*/ return ehh;
}
Azaz mindig tökéletesen ugyanazt a példányt kapod a MySingleton.getInstance(...); hívással. A ruby persze elrejti a mocskos részleteket az "include Singleton" mixinnel ugye? ;) De ott is ez van a hátterében...
Persze az tény, hogy singleton esetén nem lesz végtelen rekurziós konstruktorod, de azért nem ez fő célja/haszna... (Na jó, persze ha béna vagy, a protected konstruktorba is rakhatsz végtelen rekurziót, az ellen nem véd ;)