Полиморфизм:
Когда у вас есть оператор выбора, использующий тип объекта, он является основным кандидатом для рефакторинга полиморфизма.
Проверьте книгу Рефакторинг Мартина Фаулера:
"Одним из наиболее очевидных симптомов объектно-ориентированного кода является его сравнительное отсутствие переключения (или
дела) заявления. Проблема с инструкциями switch по существу заключается в дублировании. Часто ты
найти один и тот же оператор switch, разбросанный по программе в разных местах. Если вы добавите новый
В предложении к переключателю вы должны найти все эти переключатели, операторы и изменить их. Отклоненный
Понятие полиморфизма дает вам элегантный способ справиться с этой проблемой.
В большинстве случаев вы видите оператор switch, вы должны учитывать полиморфизм. Вопрос в том, где
полиморфизм должен произойти. Часто оператор switch включает код типа. Ты хочешь
метод или класс, который содержит значение кода типа. Так что используйте метод извлечения, чтобы извлечь переключатель
оператор, а затем метод Move, чтобы получить его в классе, где необходим полиморфизм. В
В этот момент вы должны решить, заменить ли код типа на подклассы или заменить
Введите код с государством / стратегии. Когда вы настроили структуру наследования, вы можете использовать
Заменить условное на полиморфизм. "
Вот один из подходов к использованию полиморфизма в вашей ситуации:
Определить абстрактный метод в
AbstractNode назвал что-то вроде
Дисплей ().
Затем на самом деле реализовать Display () в
каждый из SiteNode и SiteSubNode
классы.
Затем, когда вам нужно отобразить эти
узлы, вы можете просто повторить
через коллекцию, содержащую
элементы типа AbstractNode и вызова
Дисплей () для каждого.
вызов Display () будет
автоматически разрешить до фактического
конкретная реализация для реального
тип этого предмета.
Примечание: вы также можете переместить
Метод Display () из AbstractNode
к интерфейсу INode, если
Виртуальный узел должен отображаться.