Не нарушает ли паттерн «посетитель» принцип OCP? Есть интерфейс:interface Visitor:
visitA(a: A)
visitB(b: B)
visitC(c: C)
И несколько имплементаций:class SlowVisitor:
visitA(a: A)
visitB(b: B)
visitC(c: C)
class FastVisitor:
visitA(a: A)
visitB(b: B)
visitC(c: C)
Предположим, у нас добавляется новый объект D. Приходится изменять интерфейс:interface Visitor:
visitA(a: A)
visitB(b: B)
visitC(c: C)
visitD(d: D)
С изменением интерфейса придется изменять ВСЕ посетители. Не нарушаем ли мы OCP в таком случае?

24 Мар 2021 в 19:59
124 +1
0
Ответы
1

Да, в данном случае нарушается принцип Open/Closed Principle (OCP), так как при добавлении нового объекта D приходится изменять интерфейс Visitor и все его имплементации. Лучше было бы создать новый интерфейс для посетителя, который содержал бы методы для посещения объектов A, B, C и D, и создать новые имплементации для нового объекта D без изменения существующего кода.

17 Апр 2024 в 20:14
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир