gpt4 book ai didi

ruby - 如何在初始化父类时返回子类的新实例?

转载 作者:数据小太阳 更新时间:2023-10-29 06:46:13 27 4
gpt4 key购买 nike

给定一个类层次结构如下:

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 的实例?或 C初始化时A ? IE。 my_obj = A.new(param)会导致 my_obj作为类 B 的一个实例或 C取决于 param 的值, 在 A.initialize(param) 中检查.

在我的用例中,它只在运行时知道要使用哪个子类(BC),而父类(A)基本上从未真正使用过。我认为移动决定是否 B 的逻辑可能是个好主意。或 C进入他们共同的祖先。

如果这不可能(或糟糕的风格),我应该在哪里检查 param以及决定初始化哪个类?

最佳答案

您在这里违反了一个基本的 OO 原则——类不应该知道它们的子类。当然,有时原则应该被打破,但这里没有明显的理由这样做。

更好的解决方案是将实例化逻辑转移到单独类中的工厂方法。工厂方法采用与上面 A 的初始值设定项相同的参数,并返回相应类的实例。

关于ruby - 如何在初始化父类时返回子类的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11074175/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com