0

我想根据初始参数初始化不同类的实例。例如,我想对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
4

1 回答 1

2

你所说的叫做Factory模式(至少,一个简单的版本)。可以将new进程调用allocateinitialize手动拆分,但我不建议这样做。

主要原因是因为它完全违反直觉。您将(几乎)永远找不到这样的 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(...)
于 2013-04-10T08:05:04.773 回答