責任鏈模式

2021-09-05 10:46:25 字數 1792 閱讀 6292

說到責任鏈模式,我就想起了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,同...