[Ответить в тред] Ответить в тред

02/12/16 - Конкурс визуальных новелл доски /ruvn/
15/11/16 - **НОВЫЙ ФУНКЦИОНАЛ** - Стикеры
09/10/16 - Открыта доска /int/ - International, давайте расскажем о ней!

Check this out!

Новые доски: /2d/ - Аниме/Беседка • /wwe/ - WorldWide Wrestling Universe • /ch/ - Чатики и конфочки • /int/ - International • /ruvn/ - Российские визуальные новеллы • /math/ - Математика • Создай свою

[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 16 | 1 | 2
Назад Вниз Каталог Обновить

Аноним 11/03/17 Суб 12:36:31  148543680  
catschess.jpg (64Кб, 566x508)
Объясните в чём заключается циклическая зависимость в паттерне Visitor?

Понятно, что если добавляется ещё один элемент в посещаемой иерархии, то у каждого посетителя надо прописать visit() для этого элемента. Здесь видна зависимость.

Но если добавляется новый посетитель реализующий интерфейс Visitor, каким образом это влияет на посещаемую иерархию? Ведь весь принцип паттерна в том чтобы она не менялась.

Где цикл?
Аноним 11/03/17 Суб 13:52:37  148548164
>>148543680 (OP)
А с чего ты взял, что она есть?
Аноним 11/03/17 Суб 14:12:31  148549258
>>148548164
https://web.archive.org/web/20151022084246/http://objectmentor.com/resources/articles/visitor.pdf
Аноним 11/03/17 Суб 14:33:17  148550548
>>148549258
Может сошлешься на конкретную строку, где цикличность упоминается? Буду я еще после gof эту мочу читать.
Аноним 11/03/17 Суб 14:34:10  148550592
>>148550548
Начни с acyclic visitor
Аноним 11/03/17 Суб 14:42:52  148551132
>>148550548
У меня предположение, что при добавлении класса наследующего Visitor, произойдёт перекомпилирование посещамой иерархии, но вот почему произойдёт и каким образом вырожденный (degenerate) класс её предотвращает — я не понимаю.
Аноним 11/03/17 Суб 14:53:01  148551704
>>148550592
Ну я пробежал глазами.
В двух словах, цикл неявно зашит в двойную диспетчеризацию.
Ты уже понимаешь, что при добавлении нового типа элементов тебе придется добавить новый визитор под них(ну или визит-метод в визитор), который принимает на вход элемент
Но в каждом элементе есть accept-метод, с зависимостью на визитор. Представь, что я поменял сигнатуру интерфейса visitor - теперь мне нужно вносить изменения в каждый тип помещаемых элементов.
Аноним 11/03/17 Суб 14:53:46  148551759
>>148551704
Т. е. не получается безболезненно менять ни только визитор, ни только гостей
Аноним 11/03/17 Суб 15:02:48  148552338
>>148551704
>Представь, что я поменял сигнатуру интерфейса visitor - теперь мне нужно вносить изменения в каждый тип помещаемых элементов.

Так. И если ты уберёшь все методы из Visitor, спустив их на уровень ниже в HayesVisitor, ZoomVisitor, ErnieVisitor, то при изменении сигнатуры (например) HayesVisitor меняется не вся иерархия посещаемых элементов, а только тот класс accept которого кастит на HayesVisitor. Так?
Аноним 11/03/17 Суб 15:04:06  148552414
>>148551759
Ты избавляешься от цикличной зависимости, заменяя контракт на visit-метод в корне иерархии визиторов локальными контрактами в каждом leaf-визиторе. Посмотри, теперь у тебя вместо единой реализации accept-метода много локальных, т. е. теперь у тебя нет какой-то единой точки отказа, изменения в которой повлекут за собой необходимость менять кучу кода.
Аноним 11/03/17 Суб 15:04:36  148552444
>>148552414
Понял, спасибо.
Аноним 11/03/17 Суб 15:06:25  148552562
>>148552338
Да. >>148552414
В этом ничего плохого, потому что благодаря иерархии визиторов я гарантирую, что в accept-метод попадает не какой-то мусор, а потомок визитора
Аноним 11/03/17 Суб 15:08:32  148552678
>>148552444
Я на всякий случай тебе неплохой сайт принес.
https://refactoring.guru/ru
Аноним 11/03/17 Суб 15:11:52  148552908
>>148552444
Трипл же, даже не сомневаюсь, что все понял.
Аноним 11/03/17 Суб 15:15:32  148553124
>>148543680 (OP)
Образовач
Аноним 11/03/17 Суб 15:24:54  148553718
>>148552678
Неплохо. Некая выжимка из code complete и GoF, я так понимаю? Погляжу.
Аноним 11/03/17 Суб 15:33:47  148554307
>>148553718
тут хорошо описаны паттерны, но некоторые другие статьи приведены рандомными кусками

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 16 | 1 | 2
Назад Вверх Каталог Обновить

Топ тредов
Избранное