Joh*_*ugo 6 design-patterns visitor
我已经看过两种方式的例子,特别是维基百科显示了访问对象决定访问顺序的一个例子,我认为这是一种听起来很好的方法.
我处于这种情况,我需要几个访问订单,所以让访客决定访问订单似乎是合理的.但是,如果访问者负责访问顺序(即,用于调用被访问对象的accept方法),我可以让访问者直接调用一些访问方法(即,绕过访问对象的accept方法的调用)和这似乎与模式提出的完全相反.
在我们有多个不同的访问订单时,实施访问模式以及如何处理的正确方法是什么?
我相信没有“一种正确的方法”。正确的方式是满足您需求的方式。
访问者必须访问对象结构的每个元素。问题是,它是如何到达那里的?谁负责遍历对象结构?GoF 设计模式一书对问题的回答如下:
1- 通常对象结构负责迭代。一个集合将简单地迭代它的元素,对每个元素调用 Accept 操作。
2- 另一种解决方案是使用迭代器来访问元素。
3-您甚至可以将遍历算法放在访问者中,尽管您最终会在每个 ConcreteVisitor 中为每个聚合 ConcreteElement 复制遍历代码。将遍历策略放在访问者中的主要原因是为了实现一种特别复杂的遍历,一种依赖于对对象结构的操作结果的遍历。
所以让访问者决定访问顺序是可以的。
| 归档时间: |
|
| 查看次数: |
710 次 |
| 最近记录: |