凝練 責任鏈模式(5 1)

2021-09-07 02:33:47 字數 2171 閱讀 4303

學生離開是一種典型表現責任鏈模式(chain of responsibility pattern)逼真的場景。

學生通常留給輔導員,按照休假的天數如幾個不同的類、幾天、乙個月、年份等。輔導員可能想諮詢自己或醫院黨委副書記、秘、。

責任鏈模式可以稱為「推卸」式的**。多個物件可以處理客戶發出的請求,即它們都具有對應的方法如handle()。

責任鏈模式中,多個處理者物件將構成某種資料結構。詳細的資料結構能夠是單向鏈、單向環、雙向鏈或樹。

不論構成什麼結構,對全部處理者的抽象。正如資料結構中經常使用的結點概念。

結點是自引用的,它含有乙個或多個本型別的成員變數。例程6-1中,ihandler是全部處理者物件的抽象。

它含有乙個本型別的成員變數。準備構成簡單的單向鏈;方法handle(int day) 定義了處理請求的介面。例程6-1中還提供了預設實現。

詳細處理者(concretehandler)角色。假定輔導員、院黨委副書記、書記、學校校長分別為h1、h2、h3和h4。先實現h1和h2。他們依照自己的許可權處理請求,否則採用父類的預設實現。

例程 6 1 簡單的責任鏈

package structure.chain;

public abstract class ihandler

public void handle(int day)else

}}package structure.chain;

public class h2 extends ihandlerelse

}}package structure.chain;

import tool.god;

public class student

}

bluej中測試,隨著輸入的不同,如1、2、10,輸出分別為:

ok! handler is structure.chain.h1

ok! handler is structure.chain.h2

no handler

責任鏈模式將乙個請求的處理者設計為乙個鏈。鏈上的每乙個類都能夠處理這個請求,或者將處理責任踢皮球給下家。

責任鏈的「鏈」表示處理流程的走向,h1、h2、h3和h4本身的詳細資料結構能夠是單向鏈、單向環或樹。乙個典型的應用。就是處理者構成組合模式的樹形結構,而將請求/責任沿著樹形結構的某種路徑,向上或向下傳遞。

在例程6-1中基礎上。有若干細節問題能夠展開討論和想象:

l        請求者向誰提出請求?例程中展示的是,學生能夠向責任鏈上任一處理者提出請求,由於student 僅依賴ihandler,而詳細的物件是由配置檔案配置。你也能夠指定學生僅僅能夠向處理許可權最低的輔導員提出請求。

l        處理許可權大小問題:請求能夠依照處理許可權從低到高的方式上交,也能夠依照分段(許可權平行)的方式或向下授權的方式處理。例程中演示的,事實上是分段的方式。

l        請求必需被處理嗎?例程中演示的,請求能夠被責任鏈處理或不處理。假設要求「請求在責任鏈中必須被處理」,能夠在抽象類ihandler中給出缺省處理方案作為底線。而不是官僚主義地給出"nohandler"。

l        誰指定自己的興許結點?本例中ihandler的子類沒有指定自己的興許結點。

抽象類的next設計private而非其它訪問許可權。子類除了自己的處理**。其它就交給super.handle(day)。

針對上述細節問題的不同回答,可以給出責任鏈的不同變體

比如。依照一般的想象,客戶student是不清楚職責鏈的處理流程(鏈的結構)和處理方式的。所以測試**中指定職責鏈的興許結點的工作,通常由某個管理類(chainmanager)或詳細結點類自己完畢。

由詳細結點類指定興許結點時。就須要考慮處理許可權大小問題和傳遞方向。再比如,[gof]定義的責任鏈模式,稱為經典責任鏈(classic chain ofresponsibility)要求詳細處理者①要麼處理、要麼傳給下家,不得部分處理;②請求在責任鏈中必須被處理。

實際應用中,是否可以變通呢?

太多的變體。以至於臨時都我不想逐一的討論了。

簡明 責任鏈模式(5 1)

學生請假是乙個經典的引入責任鏈模式 chain of responsibility pattern 的現實場景。學生通常向輔導員請假,按照請假的天數不同如幾節課 幾天 乙個月 一年等,輔導員可能自己或要請示院黨委副書記 書記 學校校長批准。責任鏈模式可以稱為 推卸 式的 多個物件能夠處理客戶發出的請...

責任鏈模式

責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...

責任鏈模式

有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...