Когда вы действительно должны использовать шаблон посетителей

Хорошо, прежде чем пометить это как дубликат, позвольте мне прояснить себя. Я читаю о шаблоне посетителя и его применении.

Я наткнулся на этот пост:Когда я должен использовать шаблон дизайна посетителя?

и пользователь, который написал первый ответ, говорит следующее:

Теперь мы хотим добавить новую операцию в иерархию, а именно мы хотим, чтобы каждое животное воспроизводило свой звук. Поскольку иерархия так проста, вы можете сделать это с прямым полиморфизмом:
...
Но, действуя таким образом, каждый раз, когда вы хотите добавить операцию, вы должны изменить интерфейс для каждого отдельного класса иерархии.

Теперь, в основном, я понимаю, зачем это нужно с его точки зрения, это в основном способ сократить время компиляции, сделав так, чтобы не каждый раз, когда вы хотите добавить новый полиморфный метод в иерархию классов, вся иерархия будет перекомпилирована.

Но он также говорит, что можно добавить новый полиморфный метод в иерархию, если это «простая» иерархия. Но мой вопрос в том, когда вы устанавливаете свою линию и решаете, что просто, а что нет.
Кроме того, что, если иерархия является сложной, но добавление нового метода просто имеет смысл быть методом экземпляра, а не иметь операцию в совершенно другом классе?

Ища немного больше, я нашел эту статью, объясняющую образец посетителя, и это используетhttp://butunclebob.com/ArticleS.UncleBob.IuseVisitor

Автор привел пример, где написание метода экземпляра делает объект связанным с чем-то, а перемещение метода в другой класс (посетитель) нарушает разделение. Это имело больше смысла для меня, но я все еще не совсем уверен, когда этот шаблон должен действительно использоваться, первый аргумент «изменение времени иерархии каждый раз, когда вы хотите добавить новый полиморфный метод ...» мне кажется это оправдание, потому что если метод, кажется, вписывается в иерархию, он должен быть там логически, предполагая, что пример Animal был действительно сложной иерархией, и я бы решил добавить метод make sound, добавление метода экземпляра было бы логичным выбором (в моем случае разум).
Но, может быть, я ошибаюсь, поэтому я здесь прошу побольше узнать об этом, может быть, кто-то может просветить меня.

Ответы на вопрос(4)

Ваш ответ на вопрос