はじめに
Chain of Responsibilityパターン: 複数のオブジェクトにリクエストを処理する機会を与えることで、 リクエストグループの送り手と受け手の間の結合を回避します。このオブジェクトをチェーンにつなぎ、ひとつのオブジェクトがリクエストを処理するまでチェーンに沿ってリクエストを渡します。
コード
//ベースハンドラを定義する
public abstract class Handler {
protected Handler handler;
public void setHandler(Handler handler) {
this.handler = handler;
}
public abstract void handleRequest();
}
//ハンドラ1を定義する
public class FirstHandler extends Handler {
@Override
public void handleRequest() {
if (true) {
doSomething();
} else if (Objects.nonNull(handler)) {
handler.handleRequest();
}
}
}
//ハンドラを定義する 2
public class SecondHandler extends Handler {
@Override
public void handleRequest() {
if (true) {
doSomething();
} else if (Objects.nonNull(handler)) {
handler.handleRequest();
}
}
}
//ハンドラーを定義する 3
public class ThirdHandler extends Handler {
@Override
public void handleRequest() {
if (true) {
doSomething();
} else if (Objects.nonNull(handler)) {
handler.handleRequest();
}
}
}
//エントリー処理メソッド
public void method(){
//責任の連鎖を定義する
Handler firstHandler = new FirstHandler();
Handler secondHandler = new SecondHandler();
Handler thirdHandler = new ThirdHandler();
firstHandler.setHandler(secondHandler);
secondHandler.setHandler(thirdHandler);
//タスクを渡す
firstHandler.handleRequest();
}
- 上記のコードでは、責任の連鎖を定義した後、条件を満たすハンドラに対してリクエストが処理されることがわかります。