设计模式之访问者模式

概念:访问者模式是一个相对比较简单,但是结构又比较复杂的一种设计模式,它讲的是一种作用于某对象结构的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作,主要将数据结构与数据操作进行分离
访问者模式的基本工作原理:在被访问者的类里加一个对外提供接待访问者的接口
UML类图:
在这里插入图片描述

Visitor:抽象访问者,用于声明访问者可以访问哪些元素,可以由抽象类或接口来表示
ConcreteVisitor:具体访问者,用来实现访问者定义的方法或者说具体实现抽象访问者定义的操作
Element:数据结构对象,这个对象提供了一个方法来让访问者调用
ConcreteElement:具体的数据结构对象,实现具体方法
ObjectStruct:结构对象,可以简单的理解为,在这个对象里面将访问者与数据结构对象进行组合
Client:客户端,实现对结构对象和访问者的调用

下面通过项目场景来简单用代码表示一下:
歌手评分项目,现在有两个评分,成功和失败,而参加的人员类别分为男人和女人,当然也可以进行细致的划分,比如说中年、青年、老年、小孩等

代码实例:
Visitor:
在这里插入图片描述
Element:
在这里插入图片描述
ConcreteVisitor:
请添加图片描述
在这里插入图片描述
ConcreteElement:
请添加图片描述
在这里插入图片描述
ObjectStruct:
在这里插入图片描述

Client:
在这里插入图片描述
运行结果:
在这里插入图片描述

  1. 优点
    符合单一职责原则
    优秀的扩展性
    灵活性非常高
  2. 缺点
    具体元素对访问者公布细节,也就是说访问者关注了其他类的内部细节,这是迪米特法则所不建议的
    具体元素变更比较困难
    违背了依赖倒转原则。访问者依赖的是具体元素,而不是抽象元素
  3. 使用场景
    一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖与其具体类的操作,也就是用迭代器模式已经不能胜任的情景
    需要对一个对结构中的对象进行很多不同并且不相关的操作,而你想避免让这些操作“污染”这些对象
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

qq_18855485

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值