JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > デザインパターン > Chain of Responsibilityパターン  
メニュー
Home
情報交換掲示板
Factory Method
Abstract Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Chain Of Responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor
  2003/07/25  田中宏和
Chain of Responsibilityパターン
◆概要
1つ以上のオブジェクトに要求を処理する機会を与えることにより、要求を送信するオブジェクトと受信するオブジェクトの結合を避ける。要求を受信する複数のオブジェクトをチェーン状につなぎ、あるオブジェクトがその要求を処理するまでそのチェーンに沿って要求を渡していく
◆UML
◆ここでの環境
OS Windows XP
J2SE SDK 1.4.1_01
◆概念的なソースコード
Handler.java(ここからダウンロード)
abstract class Handler {
  protected Handler successor;

  public void setSuccessor(Handler successor) {
    this.successor = successor;
  }

  abstract public void handleRequest(int request);
}
ConcreteHandler1.java(ここからダウンロード)
public class ConcreteHandler1 extends Handler{
  public void handleRequest(int request) {
    if (request >= 0) {
      System.out.println("ConcreteHnadler1 handle request " + request);
    }
    if (successor!=null) {
      successor.handleRequest(request);
    }
  }
}
ConcreteHandler2.java(ここからダウンロード)
public class ConcreteHandler2 extends Handler {
  public void handleRequest(int request) {
    if (request < 100) {
      System.out.println("ConcreteHnadler2 handle request " + request);
    }
    if (successor!=null) {
      successor.handleRequest(request);
    }
  }
}
ConcreteHandler3.java(ここからダウンロード)
public class ConcreteHandler3 extends Handler {
  public void handleRequest(int request) {
    if (request % 2 == 0) {
      System.out.println("ConcreteHnadler3 handle request " + request);
    }
    if (successor!=null) {
      successor.handleRequest(request);
    }
  }
}
Client.java(ここからダウンロード)
public class Client {
  public static void main(String[] args) {
    Handler h1 = new ConcreteHandler1();
    Handler h2 = new ConcreteHandler2();
    Handler h3 = new ConcreteHandler3();

    h1.setSuccessor(h2);
    h2.setSuccessor(h3);

    h1.handleRequest(2);
    h1.handleRequest(3);
    h1.handleRequest(105);
  }
}
 
◆実行
コマンドプロンプト
C:\JavaHello\Chain of Responsibility>javac *.java

C:\JavaHello\Chain of Responsibility>java Client
ConcreteHnadler1 handle request 2
ConcreteHnadler2 handle request 2
ConcreteHnadler3 handle request 2
ConcreteHnadler1 handle request 105
ConcreteHnadler1 handle request 3
ConcreteHnadler2 handle request 3

C:\JavaHello\Chain of Responsibility>

おおおお!実行できましたね!

 
 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME