Das Verhalten einer Instanz einer Klasse wird durch ihre Methode bestimmt, aber es gibt Zeiten, in denen wir wissen, dass eine bestimmte Instanz ein spezielles Verhalten haben sollte. In den meisten Sprachen müssen wir dieses Problem lösen, indem wir eine andere Klasse definieren, die einmal instanziiert wird. In Ruby können wir jedem Objekt seine eigenen Methoden mit spezifischem Verhalten für eine bestimmte Instanz der Klasse geben.
ruby> class SingletonTest | def size | print "25\n" | end | end nil ruby> test1 = SingletonTest.new #<SingletonTest:0xbc468> ruby> test2 = SingletonTest.new #<SingletonTest:0xbae20> ruby> def test2.size | print "10\n" | end nil ruby> test1.size 25 nil ruby> test2.size 10 nil
In diesem Beispiel gehören test1 und test2 zur selben Klasse, aber test2 hat eine überschriebene size -Methode und verhält sich gut. Diese Methode, die ein spezielles Verhalten für ein einzelnes Objekt hat, heißt Singleton method.
Singleton-Methoden werden häufig für Elemente in grafischen Benutzeroberflächen (GUIs) verwendet, bei denen verschiedene Aktionen ausgeführt werden müssen, wenn verschiedene Schaltflächen gedrückt werden.
Singleton-Methoden sind nicht einzigartig für Ruby, da sie in CLOS, Dylan usw. auftauchten. Auch einige Sprachen wie Self und NewtonScript haben nur Singleton-Methoden. Sie werden manchmal als Prototyping-Sprachen bezeichnet.