gpt4 book ai didi

java - 可能的设计模式而不是 instanceof?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:59:14 25 4
gpt4 key购买 nike

我正在编写一个对象转换类,用于将域层对象转换为 UI 对象,反之亦然。问题是我的 UI 对象被组织成层次结构,因此我的对象转换类包含“instanceof”语句。这里有明显的代码味道,但我不确定解决方案是什么。

所以我的 UI 层次结构包含一个 RuleDTO,如下所示:

public class RuleDTO {
protected long ruleID;
protected long rowID;
protected AttributeDTO leftCondition;
protected AttributeDTO rightCondition;
protected OperationTypeDTO operationType;
protected boolean isActive;
// etc...
}

然后我的 RuleDTO 可以被 AssignmentRuleDTO 子类化,如下所示:

public class AssignmentRuleDTO extends RuleDTO {
protected String assignedToTeam;
protected String assignmentOperator;
// etc...
}

RuleDTO 也可以被 EvaluationRuleDTO 子类化:

public class EvaluationRuleDTO extends RuleDTO {
protected String successAction;
protected String failureAction;
// etc...
}

问题出现在我的 ObjectConversionHelper 类中,它包含以下类型的逻辑:

{
// Perform logic common to RuleDTO such as setting ruleID, isActive etc
if(ruleDTO instanceof AssignmentRuleDTO) {
// Set assignedToTeam and assignmentOperator etc
}
else if (ruleDTO instanceOf EvaluationRuleDTO) {
// Set successAction and failureAction etc
}
}

这里有什么好的解决方案呢?我读过有关访问者模式的信息,但不确定它在这里如何应用。

谢谢

最佳答案

您的 RuleDTO 类应该有一个名为 setStuff() 或类似的方法。

然后您在 AssignmentRuleDTOEvaluationRuleDTO 中覆盖它以设置相关字段。

这样你的 ObjectConversionHelper 就可以调用

ruleDTO.setStuff();

关于java - 可能的设计模式而不是 instanceof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11549706/

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