Design patterns “重构多个”;如果;声明

Design patterns “重构多个”;如果;声明,design-patterns,language-agnostic,refactoring,Design Patterns,Language Agnostic,Refactoring,我最近开始为我的工作编写更多的程序。虽然我通常可以完成工作,但我的代码对我来说并不“好闻” 我如何正确地重构如下内容: def functiona() def functionb() def functionc() def functionn() if (a){ functiona } elif (b){ functionb } etc, etc, etc, 对于某些上下文,我接收了一个大型XML文件,其中每个对象

我最近开始为我的工作编写更多的程序。虽然我通常可以完成工作,但我的代码对我来说并不“好闻”

我如何正确地重构如下内容:

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

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

对于某些上下文,我接收了一个大型XML文件,其中每个对象都有一个联系人字段,该字段的格式根据对象的另一个属性(即代理)而不同,然后我使用了所有这些函数来解析联系人字段。

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

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

在非OO语言中,可以使用指向具有一组签名的函数的指针来完成,并且“状态”指示指针指向几个函数中的哪一个


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

OO语言?依赖于“代理”的多种事物?您的代码还可以,替代方案可能是更多的代码而不是更透明的代码……我正在使用groovy来处理这段特定的代码,但我通常很好奇是否有一种设计模式来处理这段代码。我想我的主要问题是那些奇怪的“如果”语句。基本上,只有联系信息是正在改变的格式,其他一切似乎都是普遍标准化的。“用什么替换条件?”的标准答案是多态性。我不确定它是否适用于这里,但它总是值得考虑的。谢谢,这看起来像我一直在寻找的。对于我的用例来说可能不值得这么做,但在将来知道会很好。