浏览互联网上有关设计模式的不同文章中的各种示例,我可以看到访问者模式与遍历某些数据结构相关联,通常是树或层次结构,我有点困惑,因为如果是这样的话我们可以也使用迭代器模式。
访问者设计模式与迭代器设计模式有何不同?还有 C# 如何使用访问者设计模式实现(模拟)“双重调度”?任何带有代码插图的想法。
最佳答案
通过使用 Visitor 模式,您可以将对某些数据结构执行的操作与特定结构分离 - 即,您定义了一些算法,它不关心它将处理哪些数据应用于。它实际上是为了解决修改不可修改的类的行为而产生的。
Iterator 模式将数据结构的探索与特定结构分离开来。
您可以将两者完美结合:使用迭代器遍历数据结构的每个项目并将访问者传递给每个项目,以便外部负责人执行项目的某些操作。
.NET 中的IEnumerable
实现了迭代器模式。假设您有一个 Item
类,它带有一个 Visit
方法,该方法接受一个 IVisitor
接口(interface),访问者实现该接口(interface),并从该接口(interface)调用一些方法来调用访客 Action 。然后您将使用迭代器访问集合中的每个项目:
IEnumerable<Item> itemCollection = new List<Item>(...);
IVisitor visitor = new VisitorImplementation();
foreach (Item item in itemCollection)
item.Visit(visitor);
关于你的第二个问题,你可能会觉得这很好 MSDN articule on the Visitor pattern and double dispatch有用。它更好地解释了访问者模式,同时也专注于该主题。
关于c# - 迭代器与访问者设计模式以及如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21933629/