让一个构造函数返回一个适当类型的对象,最巧妙、最像ruby的方法是什么?
更具体地说,这里有一个虚拟的例子:假设我有两个类Bike
和Car
哪个子类Vehicle
。我想要这个:
Vehicle.new('mountain bike') # returns Bike.new('mountain bike')
Vehicle.new('ferrari') # returns Car.new('ferrari')
我在下面提出了一个解决方案,但是它使用了
allocate
这看起来太重了。还有什么办法,或者我的办法行吗? 最佳答案
如果我做了一个工厂方法,而不是调用1new
或initialize
,我想这并不能真正回答“我如何做一个…构造器…,但我想我会这样做…
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/