开发者社区> 问答> 正文

为什么需要访问者模式?

为什么需要访问者模式?

展开
收起
不吃核桃 2024-07-31 13:26:26 17 0
3 条回答
写回答
取消 提交回答
  • 访问者模式在实际开发中使用的非常少,因为它比较难以实现并且应用该模式肯能会导致代码的可读性变差,可维护性变差,在没有特别必要的情况下,不建议使用访问者模式.

    访问者模式(Visitor Pattern) 的原始定义是:允许在运行时将一个或多个操作应用于一组对象,将操作与对象结构分离。

    这个定义会比较抽象,但是我们依然能看出两个关键点:

    一个是: 运行时使用一组对象的一个或多个操作,比如,对不同类型的文件(.pdf、.xml、.properties)进行扫描;

    另一个是: 分离对象的操作和对象本身的结构,比如,扫描多个文件夹下的多个文件,对于文件来说,扫描是额外的业务操作,如果在每个文件对象上都加一个扫描操作,太过于冗余,而扫描操作具有统一性,非常适合访问者模式。

    访问者模式主要解决的是数据与算法的耦合问题, 尤其是在数据结构比较稳定,而算法多变的情况下.为了不污染数据本身,访问者会将多种算法独立归档,并在访问数据时根据数据类型自动切换到对应的算法,实现数据的自动响应机制,并确保算法的自由扩展.
    image.png

    2024-07-31 21:04:02
    赞同 1 展开评论 打赏
  • 他的使用场景有挺多,这些场景下是需要fa访问者模式
    当数据结构相对稳定,但经常需要新增或修改不同类型的操作时,访问者模式可以将操作与数据结构分离,使得新增操作不影响现有的数据结构
    另外当存在一组不同类型的元素,每个元素需要支持不同类型的操作时,访问者模式可以将操作封装成具体访问者类,每个具体访问者类负责一种操作,当需要添加新类型的元素或操作时,访问者模式使得扩展变得相对容易,只需要新增具体元素类和具体访问者类。

    image.png

    这些场景下就得需要使用到访问者模式的

    参考文档

    2024-07-31 14:35:36
    赞同 2 展开评论 打赏
  • 需要访问者模式的原因主要有两个:一是增加新的操作而无需修改现有类的代码,这符合开闭原则;二是将有关的行为集中到一个访问者对象中,而不是分散到多个类的层次结构中,这有助于减少系统的复杂性。然而,正如上述例子所示,在某些情况下,通过直接给每个对象增加新的成员方法也可以达到类似的效果。
    image.png

    2024-07-31 14:01:40
    赞同 1 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载