給定一個類層次結構如下:如何在初始化父類時返回子類的新實例?
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
什麼時候?即my_obj = A.new(param)
會導致my_obj
是B
或C
的實例,具體取決於param
的值,該值將在A.initialize(param)
中進行檢查。
在我的用例中,它在運行時只知道使用哪個子類(B
或C
)和父類(A
)基本上從未真正使用過。 我認爲將決定B
還是C
的邏輯轉移到它們的共同祖先中可能是一個好主意。
如果這是不可能的(或不好的風格),我應該在哪裏應該檢查param
以及決定哪個類初始化?
以前回答過類似的問題。你可能在尋找的是工廠方法。看看http://stackoverflow.com/questions/1515577/factory-methods-in-ruby我想在http://stackoverflow.com/a/1515580/1128705答案將符合您的需求。 –