定义
访问者模式:表示一个作用于某对象结构中的各元素的操作。它让我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
是不是看上去跟category的效果一样一样的?
如何实现
开始实现前我们需要理解访问者模式有两个关键角色:访问者和被访问的元素,通常被访问的元素是一个部分-整体的组合结构。
- 第一步:访问者定义操作各种元素的各种接口,并由具体的访问者实现这些接口(定义中的新操作)。
- 第二步:各被访问元素抽象出新操作的一个接口,该接口接收一个访问者作为参数,各个元素实现该抽象接口,并根据自身类型调用访问者中对应的操作接口。至此访问者模式已经成型。
- 最后:在客户端创建具体的访问者,调用被访问元素的抽象接口传入具体的访问者即可。
访问者模式与Category
我们可以看到访问者模式和Category能够达到相同的目标:不改变各元素类的前提下定义作用于这些元素的新操作。
不同的地方在于:访问者模式将新操作的算法都封装在了对应的访问者中,而Category会将算法分散在各个元素的Category中。
访问者模式的缺点
访问者会与被访问元素耦合在一起,当新增一种被访问元素时,必须要新增访问者对该类型元素的操作方法。即便可以在访问者接口层进行抽象处理,具体访问者实现时还是需要具体元素具体对待。
网友评论