代理模式-開原始碼例項
阿新 • • 發佈:2021-12-21
1,開原始碼例項
HttpResponseProxy
2,開源實踐
3,總結
HttpClient想實現的功能:返回HttpResponse,釋放http連線;
3-1,為什麼通過response釋放http連線?
可能你會想到通過httpclient或者httprequest釋放http連線:
這樣是不行的,因為一個httpclient一個httprequest可以建立多個http連線:
所以將釋放http連線的動作放到response中是一件水到渠成的事。
3-2,為什麼不使用包裝器模式?
因為從類的名稱(HttpResponseProxy)上看代理的是
ConnectionHolder有很多方法,而其代理了close方法。
所以從ConnectionHolder的角度看不適合用包裝器模式。
以另外一個例子可做證明:
通過以上例子也可以看出,ResponseEntityProxy代理的並非entity,而是ConnectionHolder,所以從ConnectionHolder的角度看不適合用包裝器模式,而是用代理模式。
綜上所述,HttpResponseProxy和ResponseEntityProxy包裝了HttpResponse和ResponseEntity,代理了
包裝的程度比較輕,代理的程度比較重;
如果HttpResponseProxy和ResponseEntityProxy不借助於ConnectionHolder,而是自己能實現相關方法,則可以考慮改為HttpResponseWrapper和ResponseEntityWrapper。