动态战略模式

时间:2012-12-08 00:04:53

标签: java design-patterns

所以我正在编写一个Web服务体系结构,其中包含执行请求实际处理的FunctionProvider类,以及一个主Endpoint类,它接收并将请求委托给正确的FunctionProvider

我不确切知道运行时可用的FunctionProvider,所以我需要能够使用我的主Endpoint类'注册'(如果这是正确的词),并且查询他们看看他们是否匹配传入的请求。

public class MyFunc implements FunctionProvider{
  static {
    MyEndpoint.register(MyFunc);
  }
  public Boolean matchesRequest(Request req){...}
  public void processRequest(Request req){...}
}

public class MyEndpoint{
  private static ArrayList<FunctionProvider> functions = new ArrayList<FunctionProvider>();
  public void register(Class clz){
    functions.add(clz);
  }
  public void doPost(Request request){
    //find the FunctionProvider in functions
    //matching the request
  }
}

我真的没有做过这么多的反思Java(上面的内容很可能是错误的,但希望能说明我的意图)。

实现这个目的最好的方法是什么,而不是惹人讨厌?

1 个答案:

答案 0 :(得分:2)

  • 不要让FunctionProviders自行注册。通过某个应用程序init引导端点。使用FunctionProviders列表调用。这样你就可以配置优先级(如果两个提供商都声称他们可以处理请求怎么办?)。你现在设置它的方式是你需要以某种方式调用类来触发静态构造函数,这太间接了。
  • 如果检测到FunctionProvider是否支持给定的请求,则可以考虑将其作为配置的一部分。如果在请求中,则将其映射到 FunctionProvider。这会使人们的担忧更好一些。如果检测很复杂,请考虑在FunctionProvider的单独类中进行检测。
  • 通过配置委托/函数指针,您可以完全避免需要FunctionProvider(不确定Java是否支持委托/如何)。