在采访中我被问到以下问题:
我有以下方法:
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
设计模式适合这项任务?
我是对的吗?你觉得怎么样?
我与同事谈判。他认为strategy
设计模式更合适。
另一位专家认为chain of responsibility
设计模式更合适。
答案 0 :(得分:0)
答案 1 :(得分:0)
在这种情况下所需的关键重构工作是分离行为变化并将它们封装到对象中。这是应用策略模式的一个很好的用例。在您的情况下,您将拥有一个名为SomeObjectInterface的接口,该接口具有名为doSomething()的API。然后你就会有接口的实现,每个接口都有关于做某事的策略的实现。
public void foo(SomeObjectInterface o){
o.doSomething();
....
}
调用哪个doSomething()
实现将由对象o
的实际类型决定。
您可以参考这篇文章,了解这背后的理性:http://blog.softwarerevisited.com/2015/06/strategy-pattern.html