責任鏈模式爲請求建立了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。這種類型的設計模式屬於行爲型模式。php
在這種模式中,一般每一個接收者都包含對另外一個接收者的引用。若是一個對象不能處理該請求,那麼它會把相同的請求傳給下一個接收者,依此類推。設計模式
<?php define("WARNING_LEVEL", 1); define("DEBUG_LEVEL", 2); define("ERROR_LEVEL", 3); abstract class AbstractLog{ protected $level; protected $nextlogger; public function __construct($level){ $this->level = $level; } public function setNextLogger($next_logger){ $this->nextlogger = $next_logger; } public function logMessage($level,$message){ if($this->level == $level){ $this->write($message); } if($this->nextlogger){ $this->nextlogger->logMessage($level,$message); } } abstract function write($message); } class DebuggLogger extends AbstractLog{ public function write($message){ echo "Debug info: {$message} \n"; } } class WarningLogger extends AbstractLog{ public function write($message){ echo "Warning info: {$message} \n"; } } class ErrorLogger extends AbstractLog{ public function write($message){ echo "Error info: {$message} \n"; } } function getChainOfLoggers(){ $warning = new WarningLogger(WARNING_LEVEL); $debugg = new DebuggLogger(DEBUG_LEVEL); $error = new ErrorLogger(ERROR_LEVEL); $warning->setNextLogger($debugg); $debugg->setNextLogger($error); return $warning; } $chain = getChainOfLoggers(); $chain->logMessage(WARNING_LEVEL,"這是一條警告"); $chain->logMessage(DEBUG_LEVEL,"這是一條Debug"); $chain->logMessage(ERROR_LEVEL,"這是一條致命錯誤");
輸出this
Warning info: 這是一條警告 Debug info: 這是一條Debug Error info: 這是一條致命錯誤