《Java设计模式及实践》—3.12 访问者模式

举报
华章计算机 发表于 2019/07/22 13:37:32 2019/07/22
【摘要】 本节书摘来自华章计算机《Java设计模式及实践》一书中的第3章,第3.12节,[印度] 卡马尔米特·辛格(Kamalmeet Singh)[荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje) 张小坤 黄 凯 贺 涛 译.

3.12 访问者模式

回到我们在讨论命令模式时介绍的形状应用程序。我们应用了命令模式,因此必须重做已实现的操作。现在考虑增加保存功能。

如果将一个抽象的Save方法添加到基本形状类中,并且为每个形状扩展它,我们就解决了问题。这个解决方案可能是最直观的,但不是最好的。首先,每个类都应该承担一项责任。其次,如果需要更改我们想要保存每个形状的格式会发生什么?如果实现相同的方法来生成XML,那么是否必须更改为JSON格式?这种设计绝对不遵循开放/封闭原则。

1.目的

访问者模式将操作与其操作的对象结构分开,允许添加新操作而不更改结构类。

2.实现

访问者模式在单个类中定义了一组操作:它为每个类型的对象定义一个方法,该方法来自它必须操作的结构。只需创建另一个访问者即可添加一组新操作。类图如图3-12所示。

访问者模式基于以下类:

  • Element(元素):表示对象结构的基类。结构中的所有类都是它派生的,它们必须实现accept(visitor:Visitor)方法。

 image.png

图 3-12

  • ConcreteElementA(具体元素A)和ConcreteElementB(具体元素B):这是我们想要添加在Visitor类中实现的外部操作的具体类。

  • (Visitor)访问者:这是基本的Visitor类,它声明了与每个ConcreteElementA相对应的方法。方法的名称相同,但每种方法都按其接受的类型区分。我们可以采用这种解决方案,因为在Java中可以使用名称相同而实际不一样的方法,但如果有需要,我们可以声明具有不同名称的方法。

  • ConcreteVisitor(具体访问者):这是访问者的实现。当需要一组单独的操作时,只需创建另一个访问者。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。