设计模式(24)访问者模式

一、介绍:

1、定义:访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口。

2、组成结构:

(1)抽象元素类(Element):定义一个accept 方法,接收一个访问者对象
(2)具体元素类(ConcreteElement):实现了accept方法
(3)抽象访问类(Visitor):为该对象结构中的ConcreteElement的每一个类声明一个visit操作
(4)具体访问类(ConcreteVisitor):实现Visitor声明的操作,是每个操作实现的部分
(5)对象结构(ObjectStructure):对象结构是一个抽象表述,它内部管理了元素集合,并且可以

     迭代这些元素提供访问者访问。

3、优点:

(1)可以很方便的添加新的访问者,保证了开闭原则,利于维护

(2)将数据结构与数据操作分离,解决数据结构和操作耦合性问题

(3)符合单一职责原则、让程序具有优秀的扩展性、灵活性非常高

(4)可以对功能进行统一,可以做报表、UI、拦截器与过滤器,适用于数据结构相对稳定的系统

4、缺点:

(1)不能方便的添加新的元素者

(2)具体元素对访问者公布细节,也就是说访问者关注了其他类的内部细节,这是迪米特法则所不建议的, 这样造成了具体元素变更比较困难

(3)违背了依赖倒转原则。访问者依赖的是具体元素,而不是抽象元素

5、适用场景:

(1)需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这些操作"污染"这些对象的类,可以用访问者模式解决
(2)不同的访问者对被访问者的关注点不一样。且想很方便的添加访问者,不添加新的被访问者
(3)一个系统有比较稳定的数据结构,又有经常变化的功能需求,那么访问者模式就比较合适

二、demo:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值