温馨提示×

Ruby单例模式怎样确保唯一

小樊
84
2024-11-01 21:04:04
栏目: 编程语言

在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即可。请注意,这些方法在多线程环境下可能不是线程安全的。为了确保线程安全,你可以使用MutexThread.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

0