當(dāng)前位置:
首頁 >
设计模式--责任链(Responsibility_Chain)模式
發(fā)布時(shí)間:2025/3/21
31
豆豆
生活随笔
收集整理的這篇文章主要介紹了
设计模式--责任链(Responsibility_Chain)模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
模式定義
使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接受者之間耦合關(guān)系,將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞請(qǐng)求,直到有一個(gè)對(duì)象處理它為止
類圖
要點(diǎn)總結(jié)
- Chain of Responsibility模式的應(yīng)用場(chǎng)合在于“一個(gè)請(qǐng)求可能有多個(gè)接受者,但是最后真正的接受者只有一個(gè)”,這時(shí)候請(qǐng)求發(fā)送者與接受者的耦合有可能出現(xiàn)“變化脆弱”的癥狀,職責(zé)鏈的目的就是將二者解耦,從而更好地應(yīng)對(duì)變化
- 應(yīng)用了Chain of Responsibility模式后,對(duì)象的職責(zé)分配將更具靈活性,我們可以在運(yùn)行時(shí)動(dòng)態(tài)添加、修改請(qǐng)求的處理職責(zé)
- 如果請(qǐng)求傳遞到職責(zé)鏈的末尾任得不到處理,應(yīng)該有一個(gè)合理的缺省機(jī)制,這也是每一個(gè)接受者對(duì)象的責(zé)任,而不是發(fā)出請(qǐng)求的對(duì)象的責(zé)任
Go語言代碼實(shí)現(xiàn)
工程目錄
responsibility_chain.go
package Responsibility_Chainimport "strconv"type Handler interface {Handler(handlerID int) string }type handler struct {name stringnext HandlerhandlerID int }func NewHandler(name string, next Handler, handlerID int) *handler{return &handler{name: name,next: next,handlerID: handlerID,} }func (h *handler) Handler(handlerID int) string{if h.handlerID == handlerID{return h.name + " handled " + strconv.Itoa(handlerID)}return h.next.Handler(handlerID) }responsibility_chain_test.go
package Responsibility_Chainimport ("fmt""testing" )func TestNewHandler(t *testing.T) {wang := NewHandler("laowang", nil, 1)zhang := NewHandler("lanzhang", wang, 2)r := wang.Handler(1)fmt.Println(r)r = zhang.Handler(2)fmt.Println(r) }總結(jié)
以上是生活随笔為你收集整理的设计模式--责任链(Responsibility_Chain)模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--迭代器(Iterator)模
- 下一篇: 设计模式--命令(Command)模式