責任鏈模式

2021-09-08 10:36:51 字數 1740 閱讀 3761

職責鏈模式:

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

client:客戶端

handler: 抽象處理者:定義出乙個處理請求的介面。如果需要,介面可以定義出乙個方法以設定和返回對下家的引用。這個角色通常由乙個抽象類或介面實現。

concretehandler:具體處理者:具體處理者接到請求後,可以選擇將請求處理掉,或者將請求傳給下家。由於具體處理者持有對下家的引用,因此,如果需要具體處理者可以訪問下家。

**:

<?php 

/*這個**的功能類似於查資料,先到memcahce查,沒有的話再去mysql查。

*/class request

abstract class handler else

}final public function handle(request $req)

}return $processed;

}abstract protected function processing(request $req);

}class faststorage extends handler

protected function processing(request $req)

}return false;

}}class slowstorage extends handler

protected function processing(request $req)

}return false;

}}$request = new request(); //發起請求

$request->action = 'get';

$request->key = '20141018';

$result = $storagechain->handle($request); //這個在快存貯了直接找到了,返回true表示。

echo $request->fordebugonly."\n"; //faststorage

$request->key = '20141019'; //在發起乙個快存貯沒有的資料請求,快存貯會找下乙個鏈來處理

$result = $storagechain->handle($request);

echo $request->response."\n"; //lucky

echo $request->fordebugonly."\n"; //slowstorage

總結:優點:降低耦合度

可簡化物件的相互連線

增強給物件指派職責的靈活性

方便增加新的類

缺點:

請求到達末端也可能得不到處理

**除錯時不太方便,可能會造成迴圈呼叫

使用場景:

有多個物件可以處理同乙個請求,具體哪個物件處理該請求由執行時刻自動確定

在不明確指定接受者的情況下,向多個物件中的乙個提交乙個請求

可動態指定一組物件處理請求

責任鏈模式

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

責任鏈模式

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

責任鏈模式

了解了一下責任鏈模式,簡單的說下自己的理解吧 責任鏈就是說待處理的資料在request的時候,先經過filter1的處理,再經過filter2的處理,然後response時,先經過filter2的處理,在經過filter1的處理。實現思路是filterchain包括filter1和filter2,同...