《Java设计模式及实践》—3.12 访问者模式
【摘要】 本节书摘来自华章计算机《Java设计模式及实践》一书中的第3章,第3.12节,[印度] 卡马尔米特·辛格(Kamalmeet Singh)[荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje) 张小坤 黄 凯 贺 涛 译.
3.12 访问者模式
回到我们在讨论命令模式时介绍的形状应用程序。我们应用了命令模式,因此必须重做已实现的操作。现在考虑增加保存功能。
如果将一个抽象的Save方法添加到基本形状类中,并且为每个形状扩展它,我们就解决了问题。这个解决方案可能是最直观的,但不是最好的。首先,每个类都应该承担一项责任。其次,如果需要更改我们想要保存每个形状的格式会发生什么?如果实现相同的方法来生成XML,那么是否必须更改为JSON格式?这种设计绝对不遵循开放/封闭原则。
1.目的
访问者模式将操作与其操作的对象结构分开,允许添加新操作而不更改结构类。
2.实现
访问者模式在单个类中定义了一组操作:它为每个类型的对象定义一个方法,该方法来自它必须操作的结构。只需创建另一个访问者即可添加一组新操作。类图如图3-12所示。
访问者模式基于以下类:
Element(元素):表示对象结构的基类。结构中的所有类都是它派生的,它们必须实现accept(visitor:Visitor)方法。
图 3-12
ConcreteElementA(具体元素A)和ConcreteElementB(具体元素B):这是我们想要添加在Visitor类中实现的外部操作的具体类。
(Visitor)访问者:这是基本的Visitor类,它声明了与每个ConcreteElementA相对应的方法。方法的名称相同,但每种方法都按其接受的类型区分。我们可以采用这种解决方案,因为在Java中可以使用名称相同而实际不一样的方法,但如果有需要,我们可以声明具有不同名称的方法。
ConcreteVisitor(具体访问者):这是访问者的实现。当需要一组单独的操作时,只需创建另一个访问者。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)