デザインパターン PerlでChain of Responsibility
毎日が夏休み!!!
どーも、やましもです。
Chain of Responsibility書いてみました。
恐らくよく使われるのは連鎖的に行う処理がある場合に、
ステータスコードのようなものを持たせて、あるステップが完了していることを
確認しつつ、連鎖的に処理するケースでしょうか。
今回の実装としては具象クラス内で自身が処理するものでなかった場合は
次のクラスへととりあえずメッセージを渡すような実装としています。
ファイルはこのあたりに。
GitHub – Chain of Responsibility
ファイル構成
・LogHandler.pm
ハンドラーの抽象クラスと、具象クラスを記述したコード
(各具象クラスに全く同じsearch_requestが書いてあるのは本来不要なのですが、
まああったほうがイメージ湧きやすいだろうななんてことであえて書いてます)
・CoR.pl
ユーザーの処理を記述したコード。
ポイントとしてはCoR.plの
[Perl]
my $handlers=SEARCH::LogHandler::Incoming->new(
successor => SEARCH::LogHandler::Virus->new(
successor => SEARCH::LogHandler::Ogo->new()
)
);
[/Perl]
各クラスをインスタンス化する際に、successorというアトリビュートに
次の処理クラスのリファレンスを渡しているところですね。
この処理のお陰でsuccessor->search_requestのような記述で次のクラスへ
メッセージを送信しています。
実行するとこんな感じ。
[Shell]
[CoR]$perl CoR.pl
検索タイプはogoで日付は0101です
検索タイプはincomingで日付は0401です
[/Shell]
次回はComposite編。
それでは良い週末を。