dado una jerarquía de clases de la siguiente manera:¿Cómo devolver una nueva instancia de la subclase al inicializar la clase padre?
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
¿Es posible inicializar y devolver una instancia de B
o C
realidad al inicializar A
? Es decir. my_obj = A.new(param)
daría como resultado my_obj
siendo una instancia de la clase B
o C
dependiendo del valor de param
, que se comprueba en A.initialize(param)
.
En mi usecase solo se conoce en tiempo de ejecución qué subclase (B
o C
) usar y la clase principal (A
) básicamente nunca se usa realmente. Pensé que sería una buena idea mover la lógica de decidir si B
o C
en su ancestro común.
Si esto no es posible (o un estilo incorrecto), ¿dónde debo poner el cheque de param
y la decisión de qué clase inicializar?
Preguntas similares han sido respondidas antes.Lo que probablemente estés buscando son métodos de fábrica. Eche un vistazo a http://stackoverflow.com/questions/1515577/factory-methods-in-ruby Supongo que la respuesta en http://stackoverflow.com/a/1515580/1128705 se ajustará a sus necesidades. –