<?php
/** * 責任鏈模式(chain of responsibility pattern)為請求建立了乙個接收者物件的鏈。這種模式給予請求的型別,對請求的傳送者和接收者進行解耦。這種型別的設計模式屬於行為型模式。
* 在這種模式中,通常每個接收者都包含對另乙個接收者的引用。如果乙個物件不能處理該請求,那麼它會把相同的請求傳給下乙個接收者,依此類推。
* 意圖:避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些物件連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。
* 主要解決:職責鏈上的處理者負責處理請求,客戶只需要將請求傳送到職責鏈上即可,無須關心請求的處理細節和請求的傳遞,所以職責鏈將請求的傳送者和請求的處理者解耦了。
*//**
* class abstractlogger 建立抽象的記錄器類
*/abstract
class
abstractlogger
public
function
logmessage
($level
,$message)if
(isset
($this
->
nextlogger))
}abstract
protected
function
write
($message);
}class
consolelogger
extends
abstractlogger
protected
function
write
($message)"
.php_eol;}
}class
errorlogger
extends
abstractlogger
protected
function
write
($message)"
.php_eol;}
}class
filelogger
extends
abstractlogger
protected
function
write
($message)"
.php_eol;}
}// 建立不同型別的記錄器。賦予它們不同的錯誤級別,並在每個記錄器中設定下乙個記錄器。每個記錄器中的下乙個記錄器代表的是鏈的一部分。
$errorlogger
=new
errorlogger
(\abstractlogger::
error);
$filelogger
=new
filelogger
(\abstractlogger::
debug);
$consolelogger
=new
consolelogger
(\abstractlogger::
info);
$errorlogger
->
setnextlogger
($filelogger);
$filelogger
->
setnextlogger
($consolelogger);
$errorlogger
->
logmessage
(\abstractlogger::
info
,"this is an information.");
$errorlogger
->
logmessage
(\abstractlogger::
debug
,"this is an debug level information.");
$errorlogger
->
logmessage
(\abstractlogger::
error
,"this is an error information."
);
PHP設計模式 責任鏈模式
這種模式有另一種稱呼 控制鏈模式。它主要由一系列對於某些命令的處理器構成,每個查詢會在處理器構成的責任鏈中傳遞,在每個交匯點由處理器判斷是否需要對它們進行響應與處理。每次的處理程式會在有處理器處理這些請求時暫停。abstract class responsibility abstract publi...
PHP 責任鏈模式
使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者指間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。責任鏈模式非常顯著的優點是將請求和處理分開。請求者可以不用知道是誰處理的,處理者可以不用知道請求的全貌,兩者解耦,提高系統的靈活性。鏈中節點數量需要控制,避免...
設計模式 責任鏈
使用情況描述 某人向銀行借錢 借1w一下一般櫃員就可以解決,借2w一下一般經理就能解決,如果借更多就需要主管才能解決。這就是乙個責任鏈,根據條件的不同,分別進行複雜的邏輯運算。if,switch都可以進行這樣的操作,但是需要在每一層進行一次複雜的操作。責任鏈模式是一種物件的行為模式。在責任鏈模式裡,...