使用面向对象的样式重构if语句

时间:2013-11-22 11:32:41

标签: c# oop design-patterns refactoring

我有这段代码:

if (memo.isEmail)
    doSomething();
if (memo.isSMS)
    doAnotherAction();
if (memo.isRecursive)
    doUpdateData();

对象“备忘录”可以是“邮件”和“短信”,然后测试的三个条件都可能都是真的

如何在OO代码中转换此过程代码? 有没有解决这个问题的模式?

2 个答案:

答案 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的回答中的代码类似。

如果所有选择都是相互排斥的,这可能才有意义,目前尚不清楚。