Data una gerarchia di classe come segue:Come restituire una nuova istanza di sottoclasse durante l'inizializzazione della classe genitore?
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
E 'possibile inizializzare in realtà e restituire un'istanza di B
o C
durante l'inizializzazione A
? Cioè my_obj = A.new(param)
risulterebbe in my_obj
come un'istanza della classe B
o C
in base al valore di param
, che viene controllato in A.initialize(param)
.
Nel mio caso d'uso il suo unico noto in fase di esecuzione che sottoclasse (o B
C
) da utilizzare e la classe padre (A
) è praticamente mai usata veramente. Ho pensato che sarebbe una buona idea spostare la logica di decidere se B
o C
nel loro antenato comune.
Se ciò non è possibile (o in cattivo stile), dove devo inserire il controllo di param
e la decisione della classe da inizializzare?
Domande simili hanno avuto risposta prima.Quello che stai probabilmente cercando sono i metodi di fabbrica. Dai un'occhiata a http://stackoverflow.com/questions/1515577/factory-methods-in-ruby. Credo che la risposta su http://stackoverflow.com/a/1515580/1128705 soddisfi le tue esigenze. –