从Java中的两种方法中提取代码,也许使用委托?

我有两种方法,它们的本质上是相同的,只是类型不同.我想将此功能抽象为某种通用方法,我想可以在C#中使用委托轻松地实现它,但是我不知道Java中的等效方法.我只是在这里显示两个方法,但是有几个(如八个)不同的makeWhateverRequest样式方法.这是我的方法:

public State makeGetRequest(User user, String name) {
    Get request = Builder.getGetRequest(user, name);
    GetResponse response = service.get(request);
    return ResponseTypeFactory.getResponseType(response);
}

public State makePutRequest(User user, String name) {
    Put request = Builder.getPutRequest(user, name);
    PutResponse response = service.put(request);
    return ResponseTypeFactory.getResponseType(response);
}

如果可能有一些类似委托的事情,将User和String用作对象(如每个方法的第一行所示),则该行可以抽象为通用方法.但是,请注意,第一行返回了一个不同的值(即,Get或Put的实例),该值在第二行中使用.每个方法的最后一行已经是相同的,并使用多态性来确定要调用哪个版本的getResponseType,所以很好.

一个难题是每种方法的第二行需要调用一个不同的方法.也许我可以拥有一些同时可以实现Get和Put的接口,然后需要一个类似委托的东西,该东西需要该接口的实例.然后也许GetResponse和PutResponse都可以实现一个不同的接口,并且我可以确保有一个getResponseType可以接受该接口的实例.

Get和Put从通用基类Request继承. GetResponse和PutResponse继承自通用基类Response.我可能可以将那些基类抽象化,然后,不用具有不同的接口,而可以使用一些需要抽象基类实例的方法.

我对Java不太熟悉,所以我不知道在C#中做事的等效方法.谢谢您的帮助.

编辑:这是我对可能需要哪些接口的想法:

IRequest              IResponse
|     \                |     \
Get   Put       GetResponse  PutResponse

然后,我需要这些方法:

Builder.getRequest(User, String)
=> IRequest

service.getPut(IRequest)
=> IResponse

ResponseTypeFactory.getResponseType(IResponse)
=> State

解决方法:

我认为Java中没有什么办法可以改善您所拥有的东西.您可以使用接口做一些事情,但是会更加冗长.如果您的方法确实只有3行,那么我会坚持使用您拥有的方法.代码清晰明了,重复操作最少.

上一篇:【热点】敏捷业务分析


下一篇:【热点】探探的微服务架构