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

jsのディープコピーとシャローコピー

遅れて申し訳ありませんが、私は2日間あまり無意味な話をするつもりはありません、シャローコピーとディープコピーについてだけ話しましょう、シャローコピーは単純なデータ型のみをコピーし、新しいオブジェクト内の複雑なデータ型の値が変更されると、元のオブジェクトも変更されます、通常のオブジェクトの割り当て、新しいオブジェクトのいずれかの属性が変更されると、元のオブジェクトが変更されます。

May 22, 2020 · 2 min read