专业的编程技术博客社区

网站首页 > 博客文章 正文

设计模式:访问者模式(访问者模式的优缺点)

baijin 2024-10-01 07:32:38 博客文章 6 ℃ 0 评论

什么是访问者模式

访问者模式(Visitor Pattern),首先我们拥有一个由许多对象构成的对象结构,这些对象的类都拥有一个accept方法用来接受访问者对象;访问者对象是一个接口,他拥有一个visit方法,这个方法对访问到的对象结构中不同类型的元素作出不同的反应;在对象结构的一次访问过程中,我们遍历整个对象结构,对每一个元素都实施accept方法,在每个元素的accept方法中回调访问者的visit方法,从而使访问者得以处理对象结构的每一个元素。我们可以针对对象结构设计不同的实在的访问者类来完成不同的操作。

一句话归纳

将算法与对象结构分离

示例

在十几年前很难想象到,电脑成为了我们生活中无法或缺的一部分,工作用电脑,吃喝玩乐都在用电脑,电脑简直成为了我们生活中的一部分,还有一些大胆的人想要把电脑植入到人的体内,成为新一代“人类”,不过一般电脑由以下主要几个部分组成,显示器、键盘、鼠标、主机……等等,显示器可以提供我们视觉上的享受,键盘可以输入你任何想写的字,鼠标可以提供比键盘更灵活的操作……

代码如下:

适用性

以下场景我建议你考虑使用

  • 一个对象结构包含很多类对象,他们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作,也就是说用迭代器模式已经不能胜任的场景。
  • 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作“污染”这些对象的类,使用访问者模式将这些封装到类中。

局限性

以下场景我建议你谨慎使用

  • 增加新的元素类很困难。在访问者模式中,每增加一个新的元素类,都要在每一个具体访问者类中增加相应的具体操作,这违背了“开闭原则”。
  • 破坏封装。访问者模式中具体元素对访问者公布细节,这破坏了对象的封装性。
  • 违反了依赖倒置原则。访问者模式依赖了具体类,而没有依赖抽象类。

END

好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表