Singleton is common for every coder. It provide only instance of class.
class SimpleLogger # Lots of code deleted... @@instance = SimpleLogger.new def self.instance return @@instance end private_class_method :new end
In ruby we can use Singleton Module, it is lazy instantiation
require 'singleton' class SimpleLogger include Singleton # Lots of code deleted... end
And we can use to implement eager instantiation
class SimpleLogger # Lots of code deleted... @@instance = SimpleLogger.new # Lots of code deleted... end
There are some other way to implement the singleton pattern:
$logger = SimpleLogger.new
or
Logger = SimpleLogger.new
The deficiencies are as below:
First, if you use a global variable or a constant for this purpose, there is no way to delay the creation of the singleton object until you need it. The global variable or constant is there from the moment we first set it.
Second, neither of these techniques does anything to prevent someone from creating a second or third instance of your supposedly singleton class.