Предположим, у меня есть следующее
class AbstractClass; end
class ConcreteClass1 < AbstractClass; end
class ConcreteClass2 < AbstractClass; end
Как мне зарегистрировать возвращаемое значение, которое возвращает экземпляр класса, который наследует AbstractClass (либо ConcreteClass1, либо ConcreteClass2)?Я хочу сосредоточиться на том факте, что возвращаемое значение может быть либо ConcreteClass1
или ConcreteClass2
, но важно то, что они все kind_of(AbstractClass)
Я думал о чем-то вроде этого, это хорошоподход?
# Class MyClassFactory implements the factory pattern for selecting the appropriate class for xxx
def MyClassFactory
# @return [? < AbstractClass] an instance of a class inheriting AbstractClass
def create_instance(*args)
if cond?
ConcreteClass1
else
ConcreteClass2
end.new(*args)
end
end
Теперь предположим, что мой метод возвращает сам класс, а не экземпляр класса, это будет хороший подход?
def MyClassFactory
# @return [? <= AbstractClass] the class to be used
def select_class
if cond?
ConcreteClass1
else
ConcreteClass2
end
end
end