【23种设计模式之】21.访问者模式

本文深入解析访问者模式,探讨其如何使数据结构与操作解耦,实现操作集合的独立变化。通过实例说明如何通过访问者模式添加新操作,以及其在数据结构稳定情况下的优势。同时,文章也讨论了该模式的缺点,如增加新元素的难度和可能破坏封装性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习源码:https://github.com/liaoooyx/Design-Patterns

图片来自:https://blog.youkuaiyun.com/u012124438/article/details/70537203
在这里插入图片描述

个人理解
ObjectStructure类持有所有Element的实现类的集合。该类提供一个方法,以访问者作为传入参数,在方法内部遍历每个元素,并调用元素的accept()方法,使得访问者可以访问每个元素(对每个元素进行操作)。

元素的accept()方法同样以访问者作为传入参数,在方法内部则调用访问者的visit()方法,并将自身作为传入参数传递过去。

注意,使用该设计模式的时候,Element的实现类应该是相对固定的,否则增加新的元素需要修改所有的访问者;相对的访问者的新增则十分方便。


原文:https://blog.youkuaiyun.com/u012124438/article/details/70537203

优点:

1、使得数据结构和作用于结构上的操作解耦,使得操作集合可以独立变化。

2、添加新的操作或者说访问者会非常容易。

3、将对各个元素的一组操作集中在一个访问者类当中。

4、使得类层次结构不改变的情况下,可以针对各个层次做出不同的操作,而不影响类层次结构的完整性。

5、可以跨越类层次结构,访问不同层次的元素类,做出相应的操作。

缺点:

1、增加新的元素会非常困难。

2、实现起来比较复杂,会增加系统的复杂性。

3、破坏封装,如果将访问行为放在各个元素中,则可以不暴露元素的内部结构和状态,但使用访问者模式的时候,为了让访问者能获取到所关心的信息,元素类不得不暴露出一些内部的状态和结构,就像收入和支出类必须提供访问金额和单子的项目的方法一样。

适用性:

1、数据结构稳定,作用于数据结构的操作经常变化的时候。

2、当一个数据结构中,一些元素类需要负责与其不相关的操作的时候,为了将这些操作分离出去,以减少这些元素类的职责时,可以使用访问者模式。

3、有时在对数据结构上的元素进行操作的时候,需要区分具体的类型,这时使用访问者模式可以针对不同的类型,在访问者类中定义不同的操作,从而去除掉类型判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值