設想在醫院中:每當來了乙個病人,首先由實習醫生進行診治;如果實習醫生就解決不了,將交給正式醫生進行診治;如果正式醫生也解決不了就交給主任進行診治;依次迴圈。實習醫生->正式醫生->主任->...
這個就構成了一條責任鏈。
每個人需要處理的事件事件首先都是交給第乙個責任類,就比如例子中的實習醫生;
public
abstract
class
doctor
public
void
setnext
(doctor next)
// 具體操作
public
abstract
void
handle
(string s)
;}
public
class
trainee
extends
doctor
else
else}}
}
public
class
officialdoctor
extends
doctor
else
else
}}
public
class
director
extends
doctor
else
else}}
}
public
class
test
}
降低了物件之間的耦合度。該模式使得乙個物件無須知道到底是哪乙個物件處理其請求以及鏈的結構,傳送者和接收者也無須擁有對方的明確資訊。
增強了系統的可擴充套件性。可以根據需要增加新的請求處理類,滿足開閉原則。
增強了給物件指派職責的靈活性。當工作流程發生變化,可以動態地改變鏈內的成員或者調動它們的次序,也可動態地新增或者刪除責任。
責任鏈簡化了物件之間的連線。每個物件只需保持乙個指向其後繼者的引用,不需保持其他所有處理者的引用,這避免了使用眾多的 if 或者 if···else 語句。
責任分擔。每個類只需要處理自己該處理的工作,不該處理的傳遞給下乙個物件完成,明確各類的責任範圍,符合類的單一職責原則。
不能保證每個請求一定被處理。由於乙個請求沒有明確的接收者,所以不能保證它一定會被處理,該請求可能一直傳到鏈的末端都得不到處理。
對比較長的職責鏈,請求的處理可能涉及多個處理物件,系統效能將受到一定影響。
職責鏈建立的合理性要靠客戶端來保證,增加了客戶端的複雜性,可能會由於職責鏈的錯誤設定而導致系統出錯,如可能會造成迴圈呼叫。
設計模式 責任鏈模式
定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...
設計模式 責任鏈模式
責任鏈可以使得系統在不影響客戶端的前提下動態的安排責任鏈和分配責任。責任鏈模式中包含的角色有抽象處理者,具體處理者以及請求的傳送者。責任鏈可以是一條直線,乙個環鏈甚至乙個樹結構。它使得每乙個具體的訊息處理者都有可能處理訊息。抽象的請求處理者 author wly public abstract cl...
設計模式 責任鏈模式
責任鏈模式 chain ofresponsibility pattern 基本概念 責任鏈,顧名思義,是指乙個負責相應請求的行為鏈。首先要理解的是乙個鏈,然後通過這個鏈來管理個行為。什麼時候會用到責任鏈 對於乙個請求,沒有特別指明由誰處理或沒有指明如何處理。此時可以使用責任鏈的形式,用過將各種處理行...