假设你有一组图形类(圆形、矩形、三角形),现在要给它们加一个「计算面积」的功能,很简单,每个类加一个 area() 方法就行。
area()
过了几天又要加「导出为 JSON」,再过几天又要加「绘制到画布」。每次加新功能都要修改所有的图形类。图形类只有 3 个还好,如果有 10 个、20 个呢?
访问者模式(Visitor Pattern)的思路是:把操作从数据结构中抽离出来。数据结构(图形类)保持稳定,新的操作(面积计算、JSON 导出、绘制)封装成独立的「访问者」类。