>>返回《C#常用設(shè)計模式》
1. 簡介
- 定義
- 很多對象由每一個對象對其下家的引用而連接起來形成一條鏈,。
- 請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求,。
- 發(fā)出這個請求的客戶端并不知道鏈上的哪一個對象最終處理這個請求,,這使得系統(tǒng)可以在不影響客戶端的情況下動態(tài)地重新組織和分配責(zé)任。
- 責(zé)任鏈可能是一條直線,、一個環(huán)鏈或者一個樹結(jié)構(gòu)的一部分
- 類圖
2. 示例
public abstract class Handler {
/**
* 持有后繼的責(zé)任對象
*/
protected Handler successor;
/**
* 示意處理請求的方法,,雖然這個示意方法是沒有傳入?yún)?shù)的
* 但實際是可以傳入?yún)?shù)的,根據(jù)具體需要來選擇是否傳遞參數(shù)
*/
public abstract void handleRequest();
/**
* 取值方法
*/
public Handler getSuccessor() {
return successor;
}
/**
* 賦值方法,,設(shè)置后繼的責(zé)任對象
*/
public void setSuccessor(Handler successor) {
this.successor = successor;
}
}
public class ConcreteHandler extends Handler {
/**
* 處理方法,,調(diào)用此方法處理請求
*/
public override void handleRequest() {
/**
* 判斷是否有后繼的責(zé)任對象
* 如果有,就轉(zhuǎn)發(fā)請求給后繼的責(zé)任對象
* 如果沒有,則處理請求
*/
if(getSuccessor() != null)
{
Console.WriteLine("放過請求");
getSuccessor().handleRequest();
}else
{
Console.WriteLine("處理請求");
}
}
}
public class Client {
public static void main(String[] args) {
//組裝責(zé)任鏈
Handler handler1 = new ConcreteHandler();
Handler handler2 = new ConcreteHandler();
handler1.setSuccessor(handler2);
//提交請求
handler1.handleRequest();
}
}
|