PHP 設計模式 責任鏈

2021-10-10 05:11:07 字數 2076 閱讀 4939

<?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都可以進行這樣的操作,但是需要在每一層進行一次複雜的操作。責任鏈模式是一種物件的行為模式。在責任鏈模式裡,...