将数据结构与操作分离,在不修改数据结构的情况下添加新的操作,将操作封装成一个访问者对象,该访问者对象可以在不同的数据元素上执行相应的操作。
不同类型的景点,例如博物馆和动物园。我们希望针对不同的群体进行不同的操作,比如计算票价、收集信息等。这就是一个适用于访问者模式的场景。
优点:
- 扩展性好。在不修改元素的情况下,为元素添加新的功能。
- 通过访问者来分离无关的行为,把相关的行为封装在一起,构成一个访问者,这样每一个访问者的功能都比较单一。
缺点:
- 在访问者模式中,每增加一个新的元素类,都要在每一个具体访问者类中增加相应的具体操作,这违背了“开闭原则”。
- 访问者模式依赖了具体类,而没有依赖抽象类。