Мэтт зандстра обьекты шаблоны и методы проектирвоания, шаблон Visitor, уязвимость?

Доброе утро. В книге описывается шаблон "Посетитель".
В примере показана реализация следующим образом,
function accept ( ArmyVisitor $visitor ) {$method = "visit" . get_class ( $this ); $visitor->$method( $this)}
Генерирует имя метода и вызывает его на лету...
Но что будет если мы добавим новый Юнит, точнее новый тип юнита?
Понятное дело что при проверке кода эта ошибка сразу вылетит.
И автор как раз учит тому что код должен быть очевидным. И что еще на этапе коддинга, должно в той же ИДЕ, высветится сообщение "реализуйте метод", или на этапе запуска, А у нас получается никакой интерфейс не обязывает к реализации метода "visit". И в итоге например, код используется раз в год, в праздники, мы сделаем не реализуем метод visit об этом не узнаем, и все, пожар.. срочный выезд на работу....
Может быть посоветуете другие более "правильные" реализации этого шаблона? Или объясните почему я не прав?
  • Вопрос задан
  • 248 просмотров
Пригласить эксперта
Ответы на вопрос 1
Gomonov
@Gomonov
Сделайте этот метод (accept) абстрактным, таким образом вы заставите его реализовать в каждом новом юните.
В реализации будет типа
function accept ( ArmyVisitor $visitor ) {$visitor->visitNewUnit( $this)}

и вам IDE будет подсвечивать что visitNewUnit нет в посетителе. После добавляете в интерфейс посетителя visitNewUnit, добавляете реализацию для конкретного посетителя. Всё.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы