責任連鎖
10468 ワード
つ以上のオブジェクトに要求を処理する機会を与えることによって、受信機に要求の送付者を結合しないようにしてください.受け取ったオブジェクトをチェインし、オブジェクトがそれを処理するまで、チェーンに沿ってリクエストを渡します.
Handler :リクエストを処理するインターフェイスを定義します.
(オプション)後継リンク を実装します. ConfiteHandler :ハンドルは、それが責任があると要求します.はその後継者にアクセスできる.具体的なハンドラがリクエストを処理できるなら、そうします;さもなければ、それはその後継者に要求を転送します. Client :このリクエストをチェイン上のConcreteHandlerオブジェクトに初期化します. コード
参加者
(オプション)後継リンク
コード
public class Main {
public static void main(String[] args) {
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
h1.setSuccessor(h2);
h2.setSuccessor(h3);
int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 };
for (int request : requests) {
h1.handleRequest(request);
}
}
}
public abstract class Handler {
protected Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
abstract void handleRequest(int request);
}
public class ConcreteHandler1 extends Handler {
@Override
public void handleRequest(int request) {
if (request >= 0 && request < 10) {
System.out.println(this.getClass().getSimpleName() + " handled request " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
public class ConcreteHandler2 extends Handler {
@Override
public void handleRequest(int request) {
if (request >= 10 && request < 20) {
System.out.println(this.getClass().getSimpleName() + " handled request " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
public class ConcreteHandler3 extends Handler {
@Override
public void handleRequest(int request) {
if (request >= 20 && request < 30) {
System.out.println(this.getClass().getSimpleName() + " handled request " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
出力
ConcreteHandler1 handled request 2
ConcreteHandler1 handled request 5
ConcreteHandler2 handled request 14
ConcreteHandler3 handled request 22
ConcreteHandler2 handled request 18
ConcreteHandler1 handled request 3
ConcreteHandler3 handled request 27
ConcreteHandler3 handled request 20
エディエルジュリアン61
/
デザインパターン
メインデザインパターン
アイドル・ Sep 27・ 1分読む
#designpatterns
#creational
#structural
#behavioral
Reference
この問題について(責任連鎖), 我々は、より多くの情報をここで見つけました
https://dev.to/eidher/chain-of-responsibility-pattern-3o73
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
public class Main {
public static void main(String[] args) {
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
h1.setSuccessor(h2);
h2.setSuccessor(h3);
int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 };
for (int request : requests) {
h1.handleRequest(request);
}
}
}
public abstract class Handler {
protected Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
abstract void handleRequest(int request);
}
public class ConcreteHandler1 extends Handler {
@Override
public void handleRequest(int request) {
if (request >= 0 && request < 10) {
System.out.println(this.getClass().getSimpleName() + " handled request " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
public class ConcreteHandler2 extends Handler {
@Override
public void handleRequest(int request) {
if (request >= 10 && request < 20) {
System.out.println(this.getClass().getSimpleName() + " handled request " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
public class ConcreteHandler3 extends Handler {
@Override
public void handleRequest(int request) {
if (request >= 20 && request < 30) {
System.out.println(this.getClass().getSimpleName() + " handled request " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
ConcreteHandler1 handled request 2
ConcreteHandler1 handled request 5
ConcreteHandler2 handled request 14
ConcreteHandler3 handled request 22
ConcreteHandler2 handled request 18
ConcreteHandler1 handled request 3
ConcreteHandler3 handled request 27
ConcreteHandler3 handled request 20
エディエルジュリアン61 / デザインパターン
メインデザインパターン
アイドル・ Sep 27・ 1分読む
#designpatterns
#creational
#structural
#behavioral
Reference
この問題について(責任連鎖), 我々は、より多くの情報をここで見つけました https://dev.to/eidher/chain-of-responsibility-pattern-3o73テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol