《Java设计模式及实践》—3.12 访问者模式
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(具体访问者):这是访问者的实现。当需要一组单独的操作时,只需创建另一个访问者。
- 点赞
- 收藏
- 关注作者
评论(0)