おやつの金額の制限は、事前に決定されており、あなたが判断することができたので即答しました。中川君の質問が、「遠足のおやつにバナナは入る?」という質問や、「親が心配するので、遠足に携帯電話を持って行ってよいですか?」というものであった場合はどうでしょう。これらの事項は、事前に決定されておらず、あなたには決定できない事項です。こまったあなたは、学年主任のベテラン先生に相談に行きました。ある質問ですね、バナナは、おやつではありません。:うーん、これは難しいですね。これまで、携帯電話なんて話、なかったですからねぇ。一度職員会議で話し合ってみましょう。責任の鎖ができているのがわかるでしょうか?中川君は、自分で判断できないことを、担任のあなたに質問してきた。あなたは、あなたが判断できることは、あなた自身で判断し回答しますが、自分で判断できないことはベテラン先生の判断を仰いぎました。ベテラン先生は、ベテラン先生自ら判断できることは、自分で判断しますが、自分では判断できないことは職員会議で話し合うようにした。職員会議で決定できないようなことがあれば、校長の鶴の一声に委ねられることもあるでしょうし、もしかしたら、教育委員会に相談しなければならないこともあるでしょう。「責任を持つものが、自分の裁量で判断できるものに関しては自分で判断し、自分で判断できないものに関しては、次の責任者に判断を任せる」という連鎖が確認できますね。パターンは、このような「責任」の「鎖」をプログラムで表現するパターンです。パターンを利用するには、「一般的な責任者を表すクラス」を作成し、それを継承する形で、生徒(中川君)、学級担任(あなた)、学年主任(ベテラン先生)、職員会議などのクラスを作成します。「一般的な責任者を表すクラス」は、「判断」するメソッドと、自分で判断できなかった場合に、判断を仰ぐ、「次の責任者」を表すフィールド変数を持ちます。各責任者を表すクラスは、この「一般的な責任者を表すクラス」を継承して作成します。ソースコードで表現すると、以下のようになるでしょうか。クラスと、Levelクラスを利用しています。インスタンスを持つものとします。level)メソッドを持つものとします。System.out.println("誰にも判断できませんでした。}この様な設計にすることで、利用者からは、以下のような方法で、「責任の鎖」を自由に決定し、利用することができるようになるでしょう。Level(3)));}}このように、「責任者」それぞれを、クラスに分けてしまうことで、各責任者の役割を限定することができます。責任者の役割を明確にし、責任者をクラスとして分割することで、より柔軟に、判断の流れである「鎖」を組み替えることができるようになります。ある日、ベテラン先生がお休みであれば、ベテラン先生の変わりに、副学年主任である、中堅先生を「鎖」に組み込むことが簡単にできますね。一方で、毎回鎖をたどっていくため、処理速度が遅くなることが考えられます。速度重視のプログラムが必要なのか、柔軟性が求められるのか、状況によって判断する必要がありそうです。Textを触ってみた。