【发布时间】:2012-06-19 21:51:40
【问题描述】:
给定一个类层次结构如下:
class A
def initialize(param)
if param == 1 then
#initialize and return instance of B
else
#initialize and return instance of C
end
end
end
class B < A
end
class C < A
end
在初始化A 时,是否可以实际初始化并返回B 或C 的实例? IE。 my_obj = A.new(param) 将导致 my_obj 成为 B 或 C 类的实例,具体取决于 param 的值,该值将在 A.initialize(param) 中签入。
在我的用例中,它只在运行时知道要使用哪个子类(B 或C),而父类(A)基本上从未真正使用过。
我认为将决定是 B 还是 C 的逻辑移到它们的共同祖先中可能是个好主意。
如果这是不可能的(或不好的风格),我应该把param的检查放在哪里并决定初始化哪个类?
【问题讨论】:
-
之前已经回答过类似的问题。您可能正在寻找的是工厂方法。看看stackoverflow.com/questions/1515577/factory-methods-in-ruby 我想stackoverflow.com/a/1515580/1128705 的答案会满足你的需求。
标签: ruby oop class inheritance