說到責任鏈模式,我就想起了okhttp中設定***的時候了,今年、中外、開花,關注。
其實責任鏈就是將多個處理連線成一條鏈,然後處理乙個物件,正常點的解釋:使多個物件都有機會處理同乙個請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。
抽象責任:定義了具體的操作方式。
具體責任:實現了抽象責任中的方法。
處理類:實現抽象責任介面,儲存具體責任並完成呼叫。
這裡簡單的模仿了一下okhttp的***鏈。
首先是request和response
public
class
request
public
void
setrequeststr
(string requeststr)
}
public
class
response
public
void
setresponsestr
(string responsestr)
}
抽象責任:public
inte***ce
filter
具體責任鏈(***a、b)public
class
afilter
implements
filter
}
public
class
bfilter
implements
filter
}
責任鏈
這裡用list存放了具體的責任(***),然後實現了傳遞。
public
class
fileterchain
implements
filter
@override
public response dofilter
(request request, response response, fileterchain chain)
system.out.
println
(resultresponse.
getresponsestr()
);return resultresponse;
}}
客戶端測試類public
在okhttp中,intercepter介面如下:
public
inte***ce
interceptor
}
這裡面可以利用chain獲取request和response,而我的例子是把request和response分開的,其實可以抽象出乙個baserequest和baseresponse。而且我的舉例中並沒有用到request。但是責任鏈模式還是這個流程
the end
優點:實現了請求和處理的分離。
缺點:每次都從鏈頭開始呼叫。
我覺得學會了這些設計模式對看原始碼是非常有幫助的,至少能知道他們的大概實現思想。
責任鏈模式
責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...
責任鏈模式
有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...
責任鏈模式
了解了一下責任鏈模式,簡單的說下自己的理解吧 責任鏈就是說待處理的資料在request的時候,先經過filter1的處理,再經過filter2的處理,然後response時,先經過filter2的處理,在經過filter1的處理。實現思路是filterchain包括filter1和filter2,同...