gpt4 book ai didi

c# - 多态性与职责划分 : how to avoid 'switching on type'

转载 作者:行者123 更新时间:2023-11-30 21:07:13 25 4
gpt4 key购买 nike

在设计具有层次关系的系统时,我经常遇到一个问题,要求多态行为,但有不止一种类型的工作受益于这种多态实现。

例如,考虑一个编译器,它使用抽象语法树来组织已解析的源代码以进行编译。以多态方式组织逻辑很方便,因为您可能有不止一种类型的 ValueProvider,每个 ValueProvider 都负责发出不同的代码以将值加载到操作堆栈。问题是您可能还想对 AST 执行静态分析,在这种情况下您想要对树进行完全不同的工作,但仍然可能具有取决于所分析节点类型的行为。换句话说,您想要多态行为,但不想将分析代码与编译代码混合在一起。

我目前采用的方法是使用一个对象模型来存储数据,该模型的职责只是提供树。树的每个使用者(例如编译器或静态分析器)然后使用运行时类型信息来执行其逻辑的条件分支。这不可避免地会导致大量基于节点类型的“if/else if”或“switch”编码。多态性旨在解决这种丑陋的分支,但并行、不相交的职责似乎需要它。

有没有更好的方法来构建它?

最佳答案

您似乎在寻找 Visitor pattern :

the visitor design pattern is a way of separating an algorithm from an object structure on which it operates. A practical result of this separation is the ability to add new operations to existing object structures without modifying those structures.

(强调我的)

关于c# - 多态性与职责划分 : how to avoid 'switching on type' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10586357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com