重构多个“if”语句

时间:2014-04-08 20:50:46

标签: design-patterns language-agnostic refactoring

我最近为我的工作开始编程更多。虽然我通常可以完成工作,但我的代码并没有“闻到”我的权利。

我如何正确地重构这样的事情:

   def functiona()
   def functionb()
   def functionc()
   def functionn()

   if (a){
      functiona
   }
   elif (b){
      functionb
   }
   etc, etc, etc,

对于某些上下文,我正在提取一个大的XML文件,该文件的每个对象都有一个联系人字段,根据对象的另一个属性(即代理)的格式不同,然后我将所有这些函数都设置为解析联系人字段。

1 个答案:

答案 0 :(得分:3)

设计模式将是对象状态模式:wiki State_pattern

在OO语言中,这将是一组不同的类,每个类实现相同的接口,并且您基于“状态”创建适当的实例,并且该实例完成所有处理,直到“状态”发生更改。然后它被销毁并创建了一个不同的实例。

在非OO语言中,可以通过指向具有设置签名的函数的指针来完成,而'state'指示指针指向的几个函数中的哪一个。

这两种技术都非常灵活,但通常比简单的if语句更难以遵循。也就是说,由于读者疲劳和代码失明,大量if经常容易出错......

相关问题