1. 程式人生 > 其它 >代理模式-開原始碼例項

代理模式-開原始碼例項

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