前提:在我的项目中,我有两个分别定义请求和响应的通用类型接口。处理请求以产生响应,因此每个响应都是基于请求构建的。处理器接口处理请求以构建相应的响应。
代码:请求和响应接口分别是:
interface Request<T1>
和
interface Response<T2>
分别代表通用请求T2
和T1
响应类型(为了清楚起见,我故意用不同的名称称呼它们)。
现在,由于 T2是一个请求,而 T1是一个响应,所以上面的代码演变为:
interface Request<T1 extends Response>
和
interface Response<T2 extends Request>
注意: Request 和 Response 接口不共享任何继承关系 - 上面的代码只打算传达的是: Request 只使用其他类型,即 Response。
现在,考虑 Request 接口:由于 Response 再次被键入,并且由请求构建的响应将绑定到原始请求类型,因此,上面的代码演变为:
interface Request<T1 extends Response<? extends Request<T1>>>
和
interface Response<T2 extends Request<? extends Response<T2>>
现在,处理器接口定义为:
interface Processor<R1 extends Request<R2>, R2 extends Response<R1>> {
R2 process(R1 request);
}
具体类:
请求实现:
class ConcreteRequest implements Request<ConcreteResponse> {
ConcreteResponse response;
...`
}
响应实现:
class ConcreteResponse implements Response<ConcreteRequest> {
ConcreteRequest request;
...
}
处理器实现:
class ConcreteProcessor implements Processor<ConcreteRequest, ConcreteResponse> {
ConcreteResponse process(ConcreteRequest request) {
...
}
}
问题:上面的代码是否过度设计?是否有一种简化的方法来表示互补输入输出对象的元组?