Metodi singleton
Il comportamneto di una istanza è determinato dalla sua classe, ma ci potrebbero essere casi in cui una particolare istanza deve avere un comportamneto speciale. Nella maggior parte dei linguaggi, dobbiamo prenderci il fastidio di definire un'altra classe, che istanzieremo una sola volta. In ruby possiamo dare ad ogni oggetto i suoi propri metodi.
ruby> class SingletonTest
| def size
| print "25"
| end
| end
nil
ruby> test1 = SingletonTest.new
#<SingletonTest:0xbc468>
ruby> test2 = SingletonTest.new
#<SingletonTest:0xbae20>
ruby> def test2.size
| print "10"
| end
nil
ruby> test1.size
25
nil
ruby> test2.size
10
nil
In questo esempio, test1 e test2
appartengono alla stessa classe, ma per test2
è stato ridefinito il metodo size e
così si comporta diversamente. Un metodo
appartenente solo ad un singolo oggetto è chiamato
singleton method.
I metodi singleton sono spesso usati per gli elementi di una GUI, dove devono essere svolte azioni diferenti quando bottoni diversi sono premuti.
I metodi Singleton non sono presenti solo in ruby, sono presenti nel CLOS, Dylan, etc. Anche, alcuni linguaggi, come ad esempio, Self e NewtonScript, hanno i metodi singleton. Questi sono talvolta chiamati linguaggi prototype-based.