我有两种方法基本上做同样的事情,只是类型不同。我想将此功能抽象为一些通用方法,我想我可以在 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);
}
如果可能有一些类似委托的东西需要 aUser
和 a 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