之前写过一个服务器程序, 大概2000多行吧, 最近看到了发现写的太烂了, 就想着重构一下, 现在有4个接口与4个类, 分别是Request接口,Response接口,HttpRequest接口,HttpResponse接口以及相应的实现类DefaultRequest和DefaultResponse, DefaultHttpRequest和DefaultResponse接口.
类图大概是这样子的:
我的DefaultHttpRequest/DefaultHttpResponse是通过装饰器模式持有一个DefaultRequest/DefaultResponse来完成Request,ServletRequest/Response,ServletResponse接口的功能. 然后自己实现HttpRequest,HttpServletRequest/HttpResponse,HttpServletResponse接口的功能;
Response接口中有一个getRequest()和setRequest()方法
HttpResponse接口中有一个getHttpRequest()和setHttpRequest()方法.
这几个方法用于Request和Response进行通讯使用.
但是这就出现了一个问题:
DefaultHttpResponse的getHttpRequest()和getRequest()如果想要返回的httpRquest所持有的request和request是同一个的话, 就需要外部环境来保证, 所以我写的代码是这样的:
//request和response是由其他类解析http请求传递进来的
DefaultHttpRequest defaultRequest = new DefaultHttpRequest(request) ;
DefaultHttpResponse defaultHttpResponse = new DefaultHttpResponse(response) ;
defaultHttpResponse.setRequest(request) ;
defaultHttpResponse.setHttpRequest(defaultRequest) ;
但是我总觉着这样写, 似乎破坏了封装性, 但是不知道该怎么改?
의미는
으아악defaultHttpResponse.setRequest()
과defaultHttpResponse.setHttpRequest()
의 매개변수가 밀접하게 관련되어 있다는 것입니다. 이 경우에는 set 인터페이스인setRequest
만 유지하고 get 인터페이스인getDefaultRequest()
만 제공할 수 있습니다. 아마도 이런 식일 겁니다상호배제를 통해서도 보장될 수 있습니다
으아악또는 일관성 확인
으아아아