让一个构造函数返回一个适当类型的对象,最巧妙、最像ruby的方法是什么?
更具体地说,这里有一个虚拟的例子:假设我有两个类BikeCar哪个子类Vehicle。我想要这个:

Vehicle.new('mountain bike')  # returns Bike.new('mountain bike')
Vehicle.new('ferrari')        # returns Car.new('ferrari')

我在下面提出了一个解决方案,但是它使用了allocate这看起来太重了。还有什么办法,或者我的办法行吗?

最佳答案

如果我做了一个工厂方法,而不是调用1newinitialize,我想这并不能真正回答“我如何做一个…构造器…,但我想我会这样做…

class Vehicle
  def Vehicle.factory vt
    { :Bike => Bike, :Car => Car }[vt].new
  end
end

class Bike < Vehicle
end

class Car < Vehicle
end

c = Vehicle.factory :Car
c.class.factory :Bike

1。在这个指导性的例子中,调用方法工厂非常有效,但是irl您可能希望在注释中考虑@AlexChaffee的建议。

关于ruby - Ruby中的工厂方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1515577/

10-11 05:23