Singleton classes or Eigenclasses

28 Jan 2009 – Las Vegas, NV

Vegas for the week at a conference. In the Java world, ‘Singleton’ (at least to me) usually referred to the design pattern which allowed you to ensure that there would always only be a maximum of one object instance of a particular class. It was usually implemented by making the constructor private and providing an access method that returned a single (usually static) instance of an singular object. It might looked something like this:

 

public class SingletonExample {

	/**
	 * Private class variable
	 */
	private static SingletonExample singleton;
	
	/**
	 * This is the only method available to access the class variable.
	 * @return the singleton instance
	 */
	public static SingletonExample onlyInstance() {
		if (singleton == null)
			singleton = new SingletonExample();
		return singleton;
	}
	
	/**
	 * The Ctr should be private
	 */
	private SingletonExample() {
	}
}

Things appear to be slightly different in the Ruby world. A singleton or eigenclass in the Ruby world refers to a particular instance of an object, and ruby allows us to override the methods and behaviors of a particular object (note – not class).

 
	?> class A
	>> end
	=> nil
	>> 
	?> a = A.new
	=> #<A:0x5ef664>
	>> b = A.new
	=> #<A:0x5ee1d8>
	>> 
	?> class << a
	>> def to_s; "Instance method"; end
	>> end
	=> nil
	>> 
	?> a
	=> Instance method
	>> b
	=> #<A:0x5ee1d8>

For more checkout: whytheluckystiff.