我想根据初始参数初始化不同类的实例。例如,我想对Hello.new(true)
和有不同的行为Hello.new(false)
。准确地说,我希望他们创建不同类的实例。
我怎样才能在 Ruby 中实现这一点?
class Name1
end
class Name2
end
class Hello
def initialize(opts)
if opts
Name1.new
else
Name2.new
end
end
end
你所说的叫做Factory
模式(至少,一个简单的版本)。可以将new
进程调用allocate
和initialize
手动拆分,但我不建议这样做。
主要原因是因为它完全违反直觉。您将(几乎)永远找不到这样的 Ruby 库。
相反,我建议您使用不同的方法。例如,#factory
。
class Name1
end
class Name2
end
class Hello
def self.factory(opts)
klass = if opts
Name1
else
Name2
end
klass.new
end
end
Hello.factory(...)