blog

デザインパターン - 責任の連鎖

Chain of Responsibility パターン: 複数のオブジェクトがリクエストを処理する機会を持つことで、 リクエストグループの送り手と受け手の間の結合を避けることができます。このオブジェ...

May 23, 2020 · 2 min. read
シェア

はじめに

  • 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();
}
  • 上記のコードでは、責任の連鎖を定義した後、条件を満たすハンドラに対してリクエストが処理されることがわかります。
Read next

便利なk8s-jenkinsパイプラインでvueプロジェクトを公開する

バックエンドプロジェクトのリリースの後、この記事ではフロントエンドプロジェクト、つまり以前のオープンソースのvueプロジェクトについて話し始めます。実はパイプラインの書き方の考え方は似ていて、まずプロセスを整理し、プロセスを定義し、Jenkinsのパイプライン構文を使ってパイプラインを書きます。ここでのvueプロジェクトのリリースも同様です。 jenkinsのパイプラインの内容は、実際に多くのことを書くことができ、ここでは4つの連続は、基本的にに考慮されています...

May 23, 2020 · 6 min read