在Ruby中,單例模式確保一個類只有一個實例,并提供一個全局訪問點。要實現這個模式,你可以使用以下方法之一:
方法1:使用class變量
class Singleton
@@instance = nil
def self.instance
return @@instance if @@instance
@@instance = new
end
def initialize
# 初始化代碼
end
end
方法2:使用模塊
module Singleton
def self.included(base)
base.class_eval do
@instance = nil
def self.instance
return @instance if @instance
@instance = new
end
def initialize(*args, &block)
super
end
end
end
end
方法3:使用define_method
class Singleton
def self.instance
@instance ||= new
end
def self.new(*args, &block)
raise "Instance already created" if @instance
super
end
def initialize
# 初始化代碼
end
end
這些方法都可以確保一個類只有一個實例。當你需要訪問這個實例時,只需調用Singleton.instance
即可。請注意,這些方法在多線程環境下可能不是線程安全的。為了確保線程安全,你可以使用Mutex
或Thread.new
來實現。例如:
class Singleton
def self.instance
@instance ||= Mutex.new.synchronize { new }
end
def self.new(*args, &block)
raise "Instance already created" if @instance
super
end
def initialize
# 初始化代碼
end
end