c# - 迭代器与访问者设计模式以及如何

标签 c# .net oop design-patterns

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

访问者设计模式与迭代器设计模式有何不同?还有 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/

相关文章:

c# - DbContext 不释放 SQLite 数据库

c# - 如何将网页保存为图像

c# - react 性可观察订阅处置

javascript - 特定祖先的访问方法

c++ - 这种抽象模板Matrix类数据类型的方式好吗?

java - 为什么要使用 getter 和 setter/accessors?

c# - 如何根据输入在同一方法中返回 JsonResult 或 ActionResult?

c# - 长时间运行的 ASP.NET MVC 核心 Controller HTTPPost 方法超时

c# 如何确定 bios 日期更改

c# - 异步/等待任务,重构方法