Java のチェーンオブレスポンシビリティーパターンの実装方法は何ですか?
Javaにおける責任連鎖パターンの実装方法は以下の通りです:
- Handlerという抽象処理クラスを定義し、リクエストを処理するための抽象メソッドを含み、次の処理クラスへの参照を定義します。このクラスはインターフェースまたは抽象クラスとして実装することができます。
- 具体処理者(ConcreteHandler)クラスを定義し、抽象処理者クラスを継承または実装し、その処理方法を実装します。処理方法の中で、リクエストを処理できるかどうかを判断し、可能であれば処理し、そうでなければ次の処理者にリクエストを渡します。
- クライアント側のコードで、処理チェーンを作成し、リクエストを順番に処理するためにチェーン内の処理器に渡します。
以下は例です:
// 抽象处理器类
abstract class Handler {
protected Handler nextHandler;
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handleRequest(String request);
}
// 具体处理器类1
class ConcreteHandler1 extends Handler {
@Override
public void handleRequest(String request) {
if (request.equals("request1")) {
System.out.println("ConcreteHandler1 handles request1");
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 具体处理器类2
class ConcreteHandler2 extends Handler {
@Override
public void handleRequest(String request) {
if (request.equals("request2")) {
System.out.println("ConcreteHandler2 handles request2");
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
handler1.setNextHandler(handler2);
handler1.handleRequest("request1");
handler1.handleRequest("request2");
handler1.handleRequest("request3");
}
}
結果は出力されました。
ConcreteHandler1 handles request1
ConcreteHandler2 handles request2
上記の例では、抽象処理クラスはhandleRequestという抽象メソッドを定義し、具体的な処理クラスはそのメソッドを継承して実装しています。クライアントコードでは、ハンドラーチェーンが作成され、リクエストが順番にハンドラーに渡されます。ハンドラーの1つがリクエストを処理できれば処理し、処理できない場合は次のハンドラーにリクエストを渡します。