设计模式学习--访问者模式

本文深入探讨了访问者模式在软件设计中的应用,阐述了其核心思想、使用场景及优缺点。访问者模式通过封装数据操作与数据结构分离,实现了对对象结构的灵活扩展与高效维护,特别适用于对象结构稳定但需要频繁定义新操作的场景。

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

访问者模式:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作


访问者模式是一种将数据操作与数据结构分离的设计模式,其基本想法是软件张拥有一个由许多对象构成的,比较稳定的对象结构,这些对象中的类都拥有一个accept方法用来接受访问者的访问.访问者是一个接口,它拥有一个visit方法,这个方法对访问到的对象结构中不同类型的元素作出不同的处理.

使用场景:对象结构比较稳定,但经常需要在次对象结构上定义新的操作;  需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免遮羞操作"污染"这些对象的类,也不希望在增加新的操作时修改这些类.



Visitor: 接口或抽象类,它定义了对每个元素访问的行为,他的参数就是可以访问的元素,他的方法个数理论上与元素个数是一样的,因此,访问者模式要求元素的类族要稳定,如果经常添加,移除元素类,必然会导致频繁的修改Visitor接口,如果出现这种情况,则说明不适合使用访问者模式

ConcreteVisitor:具体的访问者,它需要给出对每一个元素类访问时所产生的具体行为

Element:元素接口或者抽象类,它定义了一个接受访问者的方法,其意义是指每一个元素都可以被访问者访问

ConcreteElement1 和2 :具体的元素类,他提供接受访问方法的具体实现,而这个具体的实现,通常情况下是使用访问者提供的访问该元素类的方法

ObjectStructure: 定义当中所提到的对象结构,对象结构是一个抽象表述,它内部管理了元素集合,并且可以迭代这些元素供访问者访问.


优点:

各角色职责分离,符合单一职责原则

具有优秀的扩展性

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

灵活性

缺点:

具体元素对访问者公布细节,违反了迪米特原则

具体元素变更时导致修改成本大

违反了依赖导致原则,为了达到"区别对待"而依赖了具体类,没有依赖抽象 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值