Tag: 访客

访客模式的替代方法?

我正在寻找一种替代访客模式。 让我只关注这个模式的几个相关方面,同时跳过不重要的细节。 我将使用一个Shape示例(对不起!): 您有一个实现IShape接口的对象的层次结构 您可以在层次结构中的所有对象上执行一些全局操作,例如Draw,WriteToXml等。 直接进入并向DrawShape界面添加一个Draw()和WriteToXml()方法是很诱人的。 这不一定是一件好事 – 只要您希望添加要在所有形状上执行的新操作,就必须更改每个IShape派生的类 为每个操作实现访问者,即Draw访问者或WirteToXml访问者将该操作的所有代码封装在一个类中。 然后添加一个新的操作就是创build一个新的访问者类来完成对所有types的IShape的操作 当您需要添加一个新的IShape派生类时,您基本上会遇到与3中相同的问题 – 必须更改所有访问者类才能添加一个方法来处理新的IShape派生types 大多数你读到关于访客模式的地方指出,第5点几乎是模式的主要标准,我完全同意。 如果IShape派生类的数量是固定的,那么这可能是一个相当优雅的方法。 所以,问题是新的IShape派生类被添加 – 每个访问者实现需要添加一个新的方法来处理该类。 这至多是不愉快的,最坏的情况是不可能的,并且表明这种模式并不是真正用来应对这种变化的。 那么问题是有没有人遇到这种情况的替代方法呢?