动态策略模式



所以我正在编写一个Web服务架构,其中包括FunctionProvider类,这些类执行请求的实际处理,以及一个接收请求并将其委托给正确FunctionProvider的主Endpoint类。

我不知道运行时可用的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(上面可能是错误的,但希望能证明我的意图)。

在不被黑客攻击的情况下实现这一点的最佳方法是什么?

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

最新更新