如何重构代码以避免多次if-s [来自面试]?

时间:2015-04-06 10:11:57

标签: if-statement design-patterns refactoring state strategy-pattern

在采访中我被问到以下问题:

我有以下方法:

public void foo(SomeObject o){
    if(o.matches(constant1)){
          doSomething1(); 
    }else if(o.matches(constant2)){
          doSomething2(); 
    }else if(o.matches(constant3)){
          doSomething3(); 
    }
    ....
}

问题是:you should refactor method above. What will you do?

在采访中,我没有掌握如何制作它。

现在我认为state设计模式适合这项任务?

我是对的吗?你觉得怎么样?

P.S。

我与同事谈判。他认为strategy设计模式更合适。

P.S。

另一位专家认为chain of responsibility设计模式更合适。

2 个答案:

答案 0 :(得分:0)

通常的答案是替换条件命令

看到这个其他的答案我给出了类似的答案:

Replacing if else statement with pattern

答案 1 :(得分:0)

在这种情况下所需的关键重构工作是分离行为变化并将它们封装到对象中。这是应用策略模式的一个很好的用例。在您的情况下,您将拥有一个名为SomeObjectInterface的接口,该接口具有名为doS​​omething()的API。然后你就会有接口的实现,每个接口都有关于做某事的策略的实现。

public void foo(SomeObjectInterface o){ o.doSomething(); .... }

调用哪个doSomething()实现将由对象o的实际类型决定。

您可以参考这篇文章,了解这背后的理性:http://blog.softwarerevisited.com/2015/06/strategy-pattern.html