Представьте, что у меня есть следующая структура наследования:
AnimalsNamespace.Animal
CatsNamespace.Cat : Animal
DogsNamespace.Dog : Animal
В моих классах приложений я часто сталкиваюсь со следующим типом кода:
void Feed(Animal animal)
{
if (animal is Cat)
{
KernelContainer.Get<ICatFeedingStrategy>().Feed((Cat)animal);
}
else if (animal is Dog)
{
KernelContainer.Get<IDogFeedingStrategy>().Feed((Dog)animal);
}
}
Это нормально какое-то время, но после того, как у меня есть куча этих утверждений, лежащих вокруг. Затем я также начинаю получать проблемы с прокси-серверами NHibernate, которые ведут себя странно, когда вы запрашиваете их тип и т. Д., И все в порядке.
Я мог бы создать класс Factory, но в итоге я получил целую кучу сложностей, так как мне просто нужно кормить кошку: ICatFeedingStrategy, ConcreteCatFeedingStrategy, IAnimalFeedingStrategyFactory, ConcreteAnimalFeedingStrategyFactory ... (плюс часто абстрактный базовый класс, такой как AnimalFeedingStrategyBase).
Существует ли шаблон, который может помочь более эффективно управлять этими структурами наследования?