Javaのチェーン・オブ・レスポンシビリティ・パターンで、実行順序を指定する方法は何ですか?
JavaのChain of Responsibilityパターンでは、実行順序を指定する方法が次のようになります。
- 責任連鎖の抽象基底クラスやインタフェースを定義し、処理メソッドと次の処理者を設定するメソッドを含める。
- 具体的な処理者クラスに処理方法を実装し、次の処理者を設定する方法で責任連鎖を繋げます。
- 指定された順序に従って、クライアント側のコードで具体的な処理者オブジェクトを作成し、次の処理者を設定します。
- 責任連鎖の処理方法を呼び出し、リクエストを最初の処理者に渡す。
- 処理者は、リクエストを処理した後、次の処理者にリクエストを渡すか、直接処理を終了するかを選択できます。
こちらは簡単なサンプルコードです:
// 定义责任链的抽象基类
public abstract class Handler {
protected Handler nextHandler;
public void setNextHandler(Handler handler) {
this.nextHandler = handler;
}
public abstract void handleRequest(String request);
}
// 具体的处理者类
public class ConcreteHandler1 extends Handler {
public void handleRequest(String request) {
if (request.equals("A")) {
System.out.println("ConcreteHandler1处理了请求:" + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
public class ConcreteHandler2 extends Handler {
public void handleRequest(String request) {
if (request.equals("B")) {
System.out.println("ConcreteHandler2处理了请求:" + request);
} 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("A");
handler1.handleRequest("B");
}
}
上記の例では、まず2つの具体的な処理者オブジェクトを作成し、次に次の処理者を設定する方法を使用してそれらを接続します。最後に、責任連鎖の処理メソッドを呼び出して、リクエストを最初の処理者に渡します。処理中に、ある処理者がリクエストを処理できる場合、リクエストを処理して終了します。そうでない場合、リクエストは次の処理者に渡されます。これにより、指定された順序で責任連鎖内の処理者を実行できます。