在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