2

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

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

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

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

4

1 回答 1

4

您似乎正在寻找访客模式

访问者设计模式是一种将算法与其操作的对象结构分离的方法。这种分离的实际结果是能够在不修改现有对象结构的情况下向现有对象结构添加新操作

(强调我的)

于 2012-05-14T15:43:36.400 回答