迭代器与访客设计模式和方法

Vis*_*u Y 7 .net c# oop design-patterns

通过互联网上可用的设计模式的不同文章中的各种示例,我可以看到访问者模式与遍历某些数据结构相关联,通常是树或层次结构,我有点困惑,因为如果是这样的话,我们可以使用迭代器模式也是如此.

访客设计模式与迭代器设计模式有何不同?另外C#如何使用访问者设计模式实现(模拟)"Double Dispatch"?有一些代码插图的任何想法.

jno*_*ovo 14

通过使用访问者模式,您可以将对某些数据结构执行的操作与特定结构分离 - 即您定义了一些不关心将应用于哪些数据的算法.它实际上是为了解决修改无法修改的类行为的问题.

所述迭代器图案解耦勘探的数据结构的从特定结构.

您可以完美地结合使用两者:使用迭代器移动数据结构的每个项目,并将访问者传递给每个项目,以便外部负责人执行项目的某些操作.

IEnumerable在.NET中实现了Iterator模式.假设您有一个Item类,该Visit方法接受IVisitor访问者实现的接口,并从该接口调用某个方法来调用访问者操作.然后,您将使用迭代器访问集合中的每个项目:

IEnumerable<Item> itemCollection = new List<Item>(...);
IVisitor visitor = new VisitorImplementation();

foreach (Item item in itemCollection)
    item.Visit(visitor);
Run Code Online (Sandbox Code Playgroud)

关于你的第二个问题,你可能会发现访问者模式上的这个伟大的MSDN关键字和双重调度很有用.它提供了对访客模式的更好解释,同时也专注于该主题.