Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 如何重构代码以避免多个if-s[来自访谈]?_If Statement_Design Patterns_Refactoring_Strategy Pattern_State Pattern - Fatal编程技术网

If statement 如何重构代码以避免多个if-s[来自访谈]?

If statement 如何重构代码以避免多个if-s[来自访谈]?,if-statement,design-patterns,refactoring,strategy-pattern,state-pattern,If Statement,Design Patterns,Refactoring,Strategy Pattern,State Pattern,在采访中,我被问到以下问题: 我有以下方法: public void foo(SomeObject o){ if(o.matches(constant1)){ doSomething1(); }else if(o.matches(constant2)){ doSomething2(); }else if(o.matches(constant3)){ doSomething3(); } ...

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

我有以下方法:

public void foo(SomeObject o){
    if(o.matches(constant1)){
          doSomething1(); 
    }else if(o.matches(constant2)){
          doSomething2(); 
    }else if(o.matches(constant3)){
          doSomething3(); 
    }
    ....
}
问题是:您应该重构上面的方法。你会怎么做

面试时,我不知道该怎么做

现在我认为状态设计模式适合这个任务

我说得对吗?你觉得怎么样

附笔。 我与我的同事谈判。他认为战略设计模式更合适

附笔。
另一位专家认为责任链设计模式更合适。

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

请看我给出的另一个类似答案:


本例中所需的关键重构工作是分离行为变化并将其封装到对象中。这是应用策略模式的一个很好的用例。在您的例子中,您将有一个名为SomeObjectInterface的接口,它有一个名为doSomething的API。然后,您将有接口的实现,每个wich都实现了做某事的策略

公共无效fooSomeObjectInterface o{ o、 剂量测定法; .... }

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


你可以参考这篇文章了解这背后的理由:

我相信面试官希望你通过假设你将使用面向对象语言来回答这个问题?