代理模式-开源代码实例

 

1,开源代码实例

HttpResponseProxy

 

 

2,开源实践

 

 

 

 

 

3,总结

 

    HttpClient想实现的功能:返回HttpResponse,释放http连接;

 

3-1,为什么通过response释放http连接?

 

可能你会想到通过httpclient或者httprequest释放http连接:

 

这样是不行的,因为一个httpclient一个httprequest可以建立多个http连接:

所以将释放http连接的动作放到response中是一件水到渠成的事。

 

3-2,为什么不使用包装器模式?

因为从类的名称(HttpResponseProxy)上看代理的是HttpResponse,其实代理的是ConnectionHolder

ConnectionHolder有很多方法,而其代理了close方法。

所以从ConnectionHolder的角度看不适合用包装器模式。

以另外一个例子可做证明:

 

通过以上例子也可以看出,ResponseEntityProxy代理的并非entity,而是ConnectionHolder,所以从ConnectionHolder的角度看不适合用包装器模式,而是用代理模式。

综上所述,HttpResponseProxyResponseEntityProxy包装了HttpResponseResponseEntity,代理了ConnectionHolder

包装的程度比较轻,代理的程度比较重;

如果HttpResponseProxyResponseEntityProxy不借助于ConnectionHolder,而是自己能实现相关方法,则可以考虑改为HttpResponseWrapperResponseEntityWrapper

 

3-3,为什么不使用门面(facade外观)模式

HttpResponseProxy集成HttpResponseConnectionHolder两个子系统,提供一个统一的服务界面,这样源代码原封不动,只需改名HttpResponseFacade不挺好的吗?

可能与3-2阐述的原因一样,想要的效果是复制HttpResponse,代理ConnectionHolderclose方法,抓重点是代理,所以还是取名HttpResponseProxy

 

posted @ 2021-12-21 11:21  seeAll  阅读(135)  评论(0编辑  收藏  举报