我有两种方法,它们的本质上是相同的,只是类型不同.我想将此功能抽象为某种通用方法,我想可以在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行,那么我会坚持使用您拥有的方法.代码清晰明了,重复操作最少.