Не нарушает ли паттерн «посетитель» принцип 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 в таком случае?
Да, в данном случае нарушается принцип Open/Closed Principle (OCP), так как при добавлении нового объекта D приходится изменять интерфейс Visitor и все его имплементации. Лучше было бы создать новый интерфейс для посетителя, который содержал бы методы для посещения объектов A, B, C и D, и создать новые имплементации для нового объекта D без изменения существующего кода.
Да, в данном случае нарушается принцип Open/Closed Principle (OCP), так как при добавлении нового объекта D приходится изменять интерфейс Visitor и все его имплементации. Лучше было бы создать новый интерфейс для посетителя, который содержал бы методы для посещения объектов A, B, C и D, и создать новые имплементации для нового объекта D без изменения существующего кода.