Chain of Responsibilityパターンは、要求にチェーン受信者オブジェクトを作成します。このタイプのモデルは、要求送信者と受信者のデカップリングに、要求を与えられました。デザインパターンのこのタイプは、行動パターンを属します。
このモードでは、各受信機は、典型的には、別の受信者への参照を含みます。オブジェクトが要求を処理できない場合は、その次の受信者に同じ要求を渡す、となります。
<?PHPは 定義( "WARNING_LEVEL"、1 ); 定義( "DEBUG_LEVEL"、2 )。 定義( "ERROR_LEVEL"、3 ); 抽象 クラスAbstractLog { 保護 $レベル。 保護された の$ nextlogger 。 パブリック 関数 __construct($レベル){ $この - >レベル= $レベル。 } パブリック 関数 setNextLogger($のnext_logger ){ $この - > nextlogger = $ next_logger 。 } パブリック 関数 LogMessageに($レベル、$メッセージ){ 場合($この - >レベル== $レベル){ $この - >ライト($メッセージ)。 } もし($この - > {nextlogger) $この - > nextlogger-> LogMessageに($レベル、$メッセージ)。 } } 抽象 関数ライト($メッセージ)。 } クラス DebuggLoggerは延びAbstractLog { パブリック 関数を書き込み($メッセージ){ エコー "デバッグ情報:{ $メッセージ } \ n" 。 } } クラス WarningLoggerは延びAbstractLog { パブリック 関数ライト($メッセージ){ エコー "警告情報:{ $メッセージ } \ n"を、 } } クラス ErrorLoggerは拡張AbstractLog { パブリック 関数の書き込み($メッセージ){ エコー "エラー情報:{ $メッセージ } \ nを" ; } } 関数getChainOfLoggers(){ $警告 = 新しいWarningLogger(WARNING_LEVEL)。 $ debugg = 新しいDebuggLogger(DEBUG_LEVEL)。 $エラー = 新しいErrorLogger(ERROR_LEVEL)。 $警告 - > setNextLogger($のdebugg )。 $のdebugg - > setNextLogger($エラー)。 リターン $警告。 } $鎖 = getChainOfLoggers()。 $チェーン - > LogMessageに(WARNING_LEVEL、 "这是一条警告" ); $チェーン - > LogMessageに(DEBUG_LEVEL、 "这是一条デバッグ" ); $チェーン- > LogMessageに(ERROR_LEVEL、 "これは致命的なエラーです");
輸出
情報警告:これは警告である デバッグ情報:これはデバッグで エラー情報:これは致命的なエラーです