在 Ruby 中,您可以使用模块来实现单例模式。以下是一个简单的示例:
# 创建一个名为 Singleton 的模块 module Singleton # 使用一个类变量(@instance)来存储唯一的实例 @@instance = nil # 初始化方法,用于创建唯一实例 def self.instance # 如果 @instance 为 nil,则创建一个新实例并将其赋值给 @instance unless @@instance @@instance = self.new end # 返回唯一的实例 @@instance end # 定义一个实例方法,用于返回当前实例 def self.instance @@instance end end # 使用 Singleton 模块创建一个名为 MyClass 的类 class MyClass include Singleton # 定义一个实例变量 attr_accessor :name # 初始化方法,用于设置实例变量 def initialize(name) @name = name end end # 创建 MyClass 的唯一实例 my_instance1 = MyClass.instance my_instance1.name = "Alice" # 创建 MyClass 的另一个实例 my_instance2 = MyClass.instance my_instance2.name = "Bob" # 输出两个实例的名称,它们应该是相同的,因为它们共享同一个实例 puts my_instance1.name # 输出 "Alice" puts my_instance2.name # 输出 "Alice"
在这个示例中,我们创建了一个名为 Singleton
的模块,它包含一个类变量 @instance
和两个实例方法 instance
。instance
方法用于创建唯一实例(如果尚未创建),并返回该实例。我们使用这个模块创建了一个名为 MyClass
的类,并包含了 Singleton
模块。这意味着 MyClass
只有一个实例,可以通过调用 MyClass.instance
来获取。