LINUX.ORG.RU

История изменений

Исправление dvetutnev, (текущая версия) :

необходимо преобразование типов как вверх, так и вниз

Это дурно пахнет. Иногда конечно необходимо, но лучше не надо.

Сама идея разветвлять логику в зависимости от того, какой конкретно тип достался антипаттерн. Различное поведение для разных типов должно реализоваться в самих Foo и Bar (динамический полиморфизм), а логика их использующая должна одинаково работать и с Foo, и с Bar.

Рекомендую также посмотреть на шаблон visitor.

без кастования типов пришлось бы переносить некоторый функционал в сам интерфейс, а это еще больший говнокод

Зачем в интерфейс? Можно в базовый класс отнаследованный от интерфейса. И не такой уж страшный говнокод наличие части реализации в интерфейсе. Уж точно не хуже кастования типов и ветвления от этого логики.

Исходная версия dvetutnev, :

необходимо преобразование типов как вверх, так и вниз

Это дурно пахнет. Иногда конечно необходимо, но лучше не надо.

Сама идея разветвлять логику в зависимости от того, какой конкретно тип достался антипаттерн. Различное поведение для разных типов должно реализоваться в самих Foo и Bar (динамический полиморфизм), а логика их использующая должна одинаково работать и с Foo, и с Bar.

Рекомендую также посмотреть на шаблон visitor.