我想創建一個抽象類,它將根據初始化參數創建具體實例。例如:如何在Ruby中創建「類集羣」(具有具體子類實例的工廠類)?
class SomethingGeneric
def self.new(type, arg)
class_name = "#{type.capitalize}Something"
if obj.const_defined?(class_name)
a_class = obj.const_get(class_name)
else
raise ArgumentError, "Concrete something '#{type}' was not found"
end
obj = a_class.new(arg)
return obj
end
end # class
然後我想有FooSomething < SomethingGeneric,BarSomething < SomethingGeneric多。然後當我這樣做:
obj = SomethingGeneric.new("foo", arg)
我會得到FooSomething實例。
我的問題在這裏是「新」的方法。我已經定義SomethingGeneric.new,但是FooSomething和BarSomething是SomethingGeneric的子類,因此它們繼承了被稱爲在這裏錯了論據「新」的方法:
obj = a_class.new(arg)
其中一個解決方案是使用的別稱工廠方法'新'。不過,我想堅持使用方便,並保留名爲'new'的抽象超類工廠方法。
解決此問題的最簡潔的正確方法是什麼?
爲什麼?天啊!爲什麼? – Ariejan 2010-10-27 13:41:59
@Ariejan爲什麼不呢? – 2013-08-22 06:46:04