【发布时间】:2010-10-27 12:58:21
【问题描述】:
我想创建一个抽象类,它将根据初始化参数创建具体实例。示例:
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 我会得到 FooSomething 实例。 我的问题是“新”方法。我已经定义了SomethingGeneric.new,但是FooSomething 和BarSomething 是SomethingGeneric 的子类,因此它们继承了“新”方法,该方法在这里被错误的参数调用: 其中一个解决方案是为工厂方法“new”使用另一个名称。不过,我想坚持方便,并保持抽象超类工厂方法名为“新”。 解决这个问题最干净的正确方法是什么?obj = SomethingGeneric.new("foo", arg)
obj = a_class.new(arg)
【问题讨论】:
标签: ruby abstract-class factory-method class-cluster