在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
方法,輸出實例的名字。