如何解决访问者和迭代器组合
我有一个名为 Binary
的对象,它包含一个只是字符串的引用数组。在解析过程之后,这些引用将产生其他 Binary
对象,当然这些二进制文件可能包含引用等。
看来我正在处理复合模式(复合 Binary
包含另一个复合 Binary
或叶 Binary
)。
但是,我对如何以更简洁的方式构建这种复合材料感到困惑。我有以下方法,它将 Binary
作为输入并执行深度优先遍历。
[NotNull] public Binary ResolveReferences([NotNull] Binary entryPointBinary)
{
var compositeBuilder = new CompositeBuilder();
compositeBuilder.AddBinary(entryPointBinary);
stack.Push(entryPointBinary);
while (stack.Any())
{
stack.TryPop(out var currentBinary);
if (!visited.Contains(currentBinary)) visited.Add(currentBinary);
if (currentBinary.References != null)
{
foreach (var reference in currentBinary.References)
{
var resolvedBinary = GetResolvedReference(reference);
if (!visited.Contains(resolved))
stack.Push(resolved);
compositeBuilder.AddBinary(currentBinary,resolved);
}
}
}
return compositeBuilder.GetResult();
如您所见,这种方法远未尊重单一职责主体。它执行引用解析和构建组合,并在二进制文件上使用 DFS 进行迭代。
我尝试做的:
为了清理这个方法,我想,我会使用迭代器对二进制文件和访问者执行 DFS 来解析每个依赖项的引用。因此,我可以解耦解析逻辑并使用另一个访问者构建每个 Binary
的组合,其中包含一个 Binary
(根)和一个由解析引用产生的二进制文件。
您可以使用 Visitor 和 Iterator 来遍历复杂的数据 构造并对其元素执行一些操作,即使它们 都有不同的班级。
但是,我发现这与以下引用所述的访问者模式不对应
如果你对每个元素应用相同的操作,或者所有的 元素属于同一类型,您不需要访问者。你需要一个 当您想根据访问者选择不同的操作时 元素类型。
我的问题是:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。