Chain of Responsibilityパターンをサンプルコード付き解説

image

Chain of Responsibilityパターンとは?

複数のオブジェクトを鎖のように繋いでおき、そのオブジェクトの鎖を順次渡り歩いて、目的のオブジェクトを決定するデザインパターン

ざっくりいうと、目的の処理をしてくれるオブジェクトまでたらい回しにするパターンのことです。

サンプルコードを見ながら、理解を深めていきましょう!

メリット

  • 要求する側と処理をする側の結びつきを弱めることができる
  • 動的にたらい回しの順番を変えることができる
  • 自分の仕事に集中できる

デメリット

  • 処理が遅くなる

誰が要求を処理すべきか前もって決まっていて、その相手がすぐに処理をする場合に比べると処理が遅くなってしまいます。

サンプルコード

サンプルコードとして、役所に書類を提出するときに担当の課にたどり着くまでたらい回しされるようなコードを作ってみました。

クラス図は以下のようになっております。

image

Documentクラス

提出する書類を表すクラスです。

m_numberは書類の種類を表しています。

後述する課クラスはこのm_numberを見て書類を処理するか判断します。

Supportクラス

このクラスは各課の抽象クラスとなります。

m_nextフィールドはたらい回しする先を示しています。

supportメソッドはTemplate Methodパターンを使用しています。

image TemplateMethodパターン@Java言語で学ぶデザインパターン入門

Juminkaクラス

住民課を表したクラスです。

書類番号9以下の書類を処理してくれます。

自分の範囲外のことは知らずに実装できているのが特徴です(自分の仕事に集中できるメリット)

MyNumberkaクラス

マイナンバー課クラス。

自分の範囲外のことは知らずに実装できているのが特徴です(自分の仕事に集中できるメリット)

Fukusikaクラス

福祉課クラス

自分の範囲外のことは知らずに実装できているのが特徴です(自分の仕事に集中できるメリット)

Mainクラス

まず各課の担当者を作成します。

次にsetNextメソッドを使ってたらい回しする順番をセットします。(動的にたらい回しの順番を変えることができるメリット)

あとは適当に書類を作って担当の者に処理させています。

出力結果

関連しているパターン

Java画像 Compositeパターン@Java言語によるデザインパターン入門

参考書籍

java言語で学ぶデザインパターン入門第3版を参考にさせていただきました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


error: Content is protected !!