设计模式 -- 访问者模式

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是访问者模式?

        访问者模式是一种行为型设计模式,它允许你将算法与对象结构分离。通过此模式,你可以在不修改现有类的情况下向现有类层次结构中添加新的行为。

        在访问者模式中,有两类对象:元素和访问者。元素是一个具有某些接受访问者的方法的对象,而访问者是一个实现了访问者接口的对象,该接口定义了访问者如何访问元素。

二、访问者模式的优缺点:

优点:

  1. 增加新的操作很容易,只需要增加一个新的访问者即可,不需要修改原有的代码。

  2. 将数据结构与操作分离,使得数据结构可以独立于操作而变化,而操作也可以独立于数据结构而变化。

  3. 可以避免使用大量的条件语句来判断数据结构中的元素类型,使代码更加清晰简洁。

  4. 可以提高代码的复用性和扩展性,使得系统更加灵活。

缺点:

  1. 增加了类的数目,使得系统更加复杂。

  2. 访问者模式中的数据结构必须支持迭代器,这限制了一些数据结构的使用。

  3. 访问者模式实现起来比较复杂,需要对访问者、元素等多个类进行设计和编码。

三、访问者模式的结构:

 

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

(2)ConcreteVisitor1、ConcreteVisitor2:具体的访问类,它需要给出对每一个元素类访问时所产生的具体行为。

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

(4)ConcreteElementA、ConcreteElementB:具体的元素类,它提供接受访问方法的具体实现,而这个具体的实现,通常情况下是使用访问者提供的访问该元素类的方法。

(5)ObjectStructure:定义当中所说的对象结构,管理了元素集合,并且可以迭代这些元素供访问者访问。

四、访问者模式实战:

        以上图为例

1.创建元素

 

 

2.创建visitor

 

 

 

3.创建objectStructure

 4.测试

 5.测试结果

五.总结:

访问者模式的应用场景包括:

  1. 编译器的语法树遍历:访问者模式可以用于遍历语法树并执行特定的操作,例如生成中间代码,执行优化等。

  2. 数据库操作:访问者模式可以用于查询数据库并执行特定的操作,例如计算平均值,求和等。

  3. GUI组件:访问者模式可以用于遍历GUI组件并执行特定的操作,例如更新UI,处理输入事件等。

  4. XML解析:访问者模式可以用于遍历XML文档并执行特定的操作,例如生成HTML页面,提取数据等。

  5. 设计模式中的其他模式:访问者模式可以与其他设计模式一起使用,例如组合模式,迭代器模式等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值