有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javaapi设计建议

我正在为服务器开发一个API(库)(假设一个简单的服务器接收请求并在连接上写回响应)

我有三种不同的框架(第三方库)。所有这些都提供了一种处理请求的方法,但都有自己的方式。设想以下是每个库的接口:

库A

public class AHandler implements AHandler {

  public Response handle(Request req){
   // ..
  }
}

库B

public class BHandler extends SomeHandler {

  public BResponse handle(BRequest req){
   // ..
  }
}

lib C

@Handler
public class BHandler {
  @HandlerMethod
  public void handle(CRequest req, CResponse res){
   // ..
  }
}

我想创建一个API,将handle()方法抽象为某种统一的方式。由于A、B和C是第三方,我没有办法修改它们

事实:

  • 用户可以在每台服务器上有一个或多个这样的处理程序
  • 我不能修改第三方LIB的源代码,我不想控制它们的发布

API设计的最佳方式是什么,可以为所有三个LIB提供统一的接口


共 (1) 个答案

  1. # 1 楼答案

    您可以使用facade适配器的组合来实现所需的结果

    // defines the uniform interface exposed to API clients
    interface Facade {
        void handleRequest(Request request, Response response)
    }
    
    // defines the uniform interface each handler will have to expose
    interface Adapter {
        void handleRequest(Request request, Response response)
    }
    
    // takes a concrete adapter as argument and delegates to it for the concrete handle logic implementation
    class ConcreteFacade implements Facade{
    
        private Adapter adapter;
    
        public ConcreteFacade(Adapter adapter){
            this.adapter = adapter;
        }
    
        public void handleRequest(Request request, Response response){
            adaper.handleRequest(request, response);
        }
    
    }
    
    // one concrete adapter for each library
    class ConcreteAdapter implements Adapter {
    
        private AHandler handler; 
    
        public ConcreteAdapter(AHandler handler){
            this.handler = handler;
        }
    
        public void handleRequest(Request request, Response response) {
            //delegate to handler
        }
    
    }