職責鏈模式

2022-08-22 15:33:11 字數 2069 閱讀 2884

定義:

使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。

是一種遞迴操作,要注意所有接收者都無法處理請求的情況。

結構圖:

//handler類,定義乙個處理請求的介面

class handler

//宣告處理請求的方法

static  handlepequest(int irequest) = 0;

}

//concretehandler類,具體處理者,如果能處理則處理,如果不能則**給後繼者

class concretehandlera : handler

elseif ( phandler != null )

}

}

class concretehandlerb : handler

elseif ( phandler != null )

}

}

//客戶端

handler*

a = new concretehandlera();

handler*

b = new concretehandlerb();

a.setnext(b);

int irequest = 15;

a.handlepequest(irequest);

使用時機:

如果有多個物件可以處理同乙個請求,但是具體由哪個物件處理是由執行時刻動態決定的,這種物件就可以使用職責鏈模式,把處理請求的物件實現成職責物件,然後構造鏈,當請求在這個鏈中傳遞的時候,會根據執行狀態判斷。

優點:

1、可以簡化物件的互相連線,降低耦合度;

2、可以隨時隨地增加或修改請求結構,增加了給物件指派職責的靈活性;同時也可以隨時增加修改處理物件。

缺點:

1、產生很多細粒度的物件:因為功能處理都分散到了單獨的職責物件中,每個物件功能單一,要把整個流程處理完,需要很多的職責物件,會產生大量的細粒度職責物件。

2、不一定能處理:每個職責物件都只負責自己的部分,這樣就可以出現某個請求,即使把整個鏈走完,都沒有職責物件處理它。這就需要提供預設處理,並且注意構造鏈的有效性。

職責鏈模式

1.職責鏈 namespace dutychainpattern 用來處理請求 public abstract void transmitrequest int request 班主任 職責鏈上的乙個節點,在裡面進行判斷,看能否處理請求,不能則將請求轉移 public class classadvi...

職責鏈模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

職責鏈模式

劇情簡要 學習此模式,讓筆者聯想到自然界的生物鏈。打個比方 大魚吃小魚,小魚吃蝦公尺。河裡的小蝦公尺問大魚,你要不要吃我啊?大魚說 你太小了,吃了 沒吃,return 懶得吃!然後蝦公尺又問小魚 小螃蟹 小河馬同樣的問題。其實如果小蝦公尺這麼想自我了結的話,根本不用這麼費勁。這就開始了我們職責鏈模式...