设计模式 27 访问者模式

既定访问者模式类图:

  假设现在需求要扩展数据结构,增加一种具体元素,男与女之外的一种不明物体,我们暂时把它称为“怪兽”,

在既有访问者模式的架构下,应该怎样?首先增加一个Bruce类,实现Person接口。最麻烦的是要修改访问者

接口及其所有具体访问者!

  因为Visit方法中没有包含访问Bruce对象的行为,因此我们被迫要去手工更改Visitor(包括抽象的,具体

的),在其中添加有关Bruce对象 的行为,这严重违反了“开放-封闭”原则。究其原因在于目前的结构下,被访

问对象与访问对象互相依赖,自然不利于分离变化,必须去掉一层依赖关系。

  我们尝试把Visitor对Person(元素)的依赖关系去掉,抽象出对应每个具体元素的ElementVisitor接

口 -->ManVisitor,WomanVisitor,然后把Visitor对Person的依赖关系转移到ManVisitor与 WomanVisitor

身上。

改造后访问者模式的类图:

原文地址:https://www.cnblogs.com/lpfuture/p/2939184.html