在Ruby中,单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这在需要控制资源使用、配置管理或维护全局状态时非常有用。以下是Ruby中实现单例模式的一些方法:
方法1:使用class变量
class Singleton @@instance = nil def self.instance return @@instance if @@instance @@instance = new end def initialize # 初始化代码 end end # 使用单例 singleton = Singleton.instance singleton.do_something
方法2:使用Module
module SingletonModule def self.included(base) base.class_eval do @instance = nil def self.instance @instance ||= new end end end end class MyClass include SingletonModule def do_something # 方法实现 end end # 使用单例 my_instance = MyClass.instance my_instance.do_something
方法3:使用require_relative和define_method
require_relative 'singleton' class Singleton def self.instance @instance ||= new end def self.new(*args, &block) @instance ||= super.tap do |instance| define_method(:new) { instance } end end def initialize # 初始化代码 end end # 使用单例 singleton = Singleton.instance singleton.do_something
方法4:使用ThreadLocal
require 'thread' class Singleton def self.instance Thread.current[:singleton_instance] ||= new end def initialize # 初始化代码 end end # 使用单例 singleton = Singleton.instance singleton.do_something
方法5:使用ClassVar(Ruby 3.0+)
class Singleton class << self attr_reader :instance def instance @instance ||= new end def new(*args, &block) @instance ||= super.tap do |instance| define_method(:new) { instance } end end end def initialize # 初始化代码 end end # 使用单例 singleton = Singleton.instance singleton.do_something
这些方法都可以实现单例模式,你可以根据具体需求和Ruby版本选择合适的方法。