職責鏈模式:
使多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。
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,同...