访客模式如何不违反开放/封闭原则?
来自维基百科 :
这个想法是,一旦完成,类的实现只能被修改以纠正错误;新增或更改的要素需要创建不同的类。该类可以通过继承重用原始类中的编码。
据我所知,访客模式是一种强大的技术,它通过使用双重调度来遍历实现相同接口的相似但不同的对象。在我的一个 Java 示例中,我创建了一组组合对象,这些对象形成树结构,这些对象的每个特定实现都实现了可访问的接口。访问者接口为每个可访问对象都有一个方法,具体的访问者实现了对每种情况执行的操作。
我试图弄清楚的事实是,如果我要向复合结构添加一个新的实现,该结构也实现了可访问,那么我需要重新打开访问者接口并将该案例添加到其中,这也迫使我修改访问者的每个实现。
虽然这很好,因为我无论如何都需要这样做(如果访问者无法理解它们,那么增加你的可访问量有什么好处?)但是在学术层面上,这难道不会违反开放封闭原则吗?这难道不是设计模式的核心原因之一吗?试图证明一个体面的理由来切换到这种模式,而不是维护一个switch语句来结束所有switch语句,但每个人都认为代码无论如何都是相同的,每种情况都有一个方法而不是一个switch块,只是被打破了,更难阅读。