我有这段代码:
if (memo.isEmail)
doSomething();
if (memo.isSMS)
doAnotherAction();
if (memo.isRecursive)
doUpdateData();
对象“备忘录”可以是“邮件”和“短信”,然后测试的三个条件都可能都是真的
如何在OO代码中转换此过程代码? 有没有解决这个问题的模式?
答案 0 :(得分:2)
public interface IMemoProcessor
{
void Run();
}
public class EmailMemoProcessor : IMemoProcessor
{
public void Run()
{
// Send email
}
}
public class SmsMemoProcessor : IMemoProcessor
{
public void Run()
{
// Send sms
}
}
// Factory looks at the type of memo and creates appropriate memo processor.
var memoProcessor = MemoProcessorFactory.Create(memo);
memoProcessor.Run();
答案 1 :(得分:0)
通常适用于类似情况的重构是Replace Conditional With Polymorphism,这将导致代码与Rik的回答中的代码类似。
如果所有选择都是相互排斥的,这可能才有意义,目前尚不清楚。