一长串if/else/execute代码分支的最佳设计模式/方法

Jim*_*Jim 5 java oop refactoring design-patterns

我有一个"遗留"代码,我想重构.
代码基本上是对服务器的远程调用并获得回复.然后根据回复执行相应的.
代码骨架示例:

public Object processResponse(String responseType, Object response) {
    if(responseType.equals(CLIENT_REGISTERED)) {  
       //code  
       //code ...
    }  
    else if (responseType.equals(CLIENT_ABORTED)) {
       //code  
       //code....
    }    
    else if (responseType.equals(DATA_SPLIT)) {
      //code
      //code... 
   }  
   etc  
Run Code Online (Sandbox Code Playgroud)

问题是有许多if/else分支,并且每个内部的代码都不是微不足道的.
因此很难维护.
我想知道这个最好的模式是什么?
我有一个想法是创建一个方法名称与responseType相同的单个对象,然后在processResponse内部使用反射调用与responseType同名的方法.
这将清理processResponse,但它会将代码移动到具有许多/多种方法的单个对象,我认为反射会导致性能问题.
是否有一个很好的设计方法/模式来清理它?

Sat*_*mov 6

两种方法:

  1. 战略模式http://www.dofactory.com/javascript/strategy-design-pattern
  2. 创建字典,其中key是元数据(在您的情况下元数据是responseType),value是函数.

例如:

把它放在构造函数中

responses = new HashMap<string, SomeAbstraction>(); responses.Put(CLIENT_REGISTERED, new ImplementationForRegisteredClient()); responses.Put(CLIENT_ABORTED, new ImplementationForAbortedClient());

其中,ImplementationForRegisteredClientImplementationForAbortedClient实施SomeAbstraction

并通过这个词典调用 responses.get(responseType).MethodOfYourAbstraction(SomeParams);

如果您想遵循DI的原则,可以在您的客户端类中注入此Dictionary.