给定一个类层次结构如下:
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
是否可以实际初始化并返回一个实例B
or C
初始化时A
? I.e. my_obj = A.new(param)
会导致my_obj
是类的一个实例B
or C
取决于的值param
,被签入A.initialize(param)
.
在我的用例中,它只在运行时知道哪个子类(B
or C
)使用和父类(A
)基本上从未真正使用过。
我认为移动决定是否的逻辑可能是个好主意B
or C
进入他们共同的祖先。
如果这是不可能的(或风格不好),我应该在哪里检查param
并决定初始化哪个类?
你在这里违反了一个基本的面向对象原则——类不应该知道它们的子类。当然,有时应该打破原则,但这里没有明显的理由这样做。
更好的解决方案是将实例化逻辑转移到单独类中的工厂方法。工厂方法采用与上面 A 的初始值设定项相同的参数,并返回相应类的实例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)