溫馨提示×

Ruby單例模式如何實現(xiàn)懶加載

小樊
82
2024-11-01 21:17:06
欄目: 編程語言

在Ruby中,你可以使用模塊來實現(xiàn)單例模式的懶加載。這是一個示例:

module Singleton
  def self.included(base)
    base.class_eval do
      @instance = nil

      def self.instance
        return @instance if @instance

        @instance = new
        yield(@instance) if block_given?
        @instance
      end
    end
  end
end

class MyClass
  include Singleton

  def initialize(name)
    @name = name
  end

  def say_hello
    puts "Hello, my name is #{@name}."
  end
end

# 使用單例模式懶加載MyClass
my_instance = MyClass.instance { |obj| obj.name = "John" }
my_instance.say_hello # 輸出 "Hello, my name is John."

在這個示例中,我們創(chuàng)建了一個名為Singleton的模塊,它包含一個included方法。當一個類包含了這個模塊時,included方法會被調(diào)用。在這個方法中,我們定義了一個instance類方法,它會返回類的唯一實例。如果實例尚未創(chuàng)建,instance方法會創(chuàng)建一個新的實例,否則返回已創(chuàng)建的實例。

MyClass類中,我們包含了Singleton模塊,并定義了一個initialize方法。我們還定義了一個say_hello方法,用于輸出實例的名字。

要使用單例模式懶加載MyClass,我們可以調(diào)用MyClass.instance,并在塊中設置實例的屬性。在這個例子中,我們將實例的名字設置為"John"。然后我們可以調(diào)用say_hello方法,輸出實例的名字。

0