91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何使用責任鏈模式處理學生請假問題

發布時間:2021-06-24 09:29:36 來源:億速云 閱讀:135 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Java如何使用責任鏈模式處理學生請假問題的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

一. 模式定義

在責任鏈模式中,很多對象由每一個對象對其下家的引用而連接起來,形成一條鏈。客戶端應用請求在這個鏈上進行傳遞,直到鏈上的某一個對象決定處理此請求。發出這個請求的客戶端并不知道鏈上的哪個對象最終處理這個請求,這使系統可以在不影響客戶端的情況下動態地重新組織鏈和分配責任。

(1)抽象處理者角色:定義出一個處理請求的接口。如果需要,接口可以定義出一個方法,以設定和返回下家的引用。這個角色通常由一個Java抽象類或Java接口實現。

(2)具體處理角色:具體處理者接到請求后,可以選擇將請求處理掉,或者將請求傳給下家。

二. 模式舉例

1 模式分析

我們借用學生請假來說明這一模式

Java如何使用責任鏈模式處理學生請假問題

2 責任鏈模式靜態類圖

Java如何使用責任鏈模式處理學生請假問題

3 代碼示例

3.1學生接口一IStudent

package com.demo.chain.message;
/**
 * 學生接口
 *
 * @author
 *
 */
public interface IStudent {
  /**
   * 獲得學生病情狀態
   *
   * 0:小事(班長就可以處理)
   *
   * 1:班長處理不了 老師能處理的事
   *
   * 2:老師處理不了 校長能處理的事
   *
   *
   */
  public int getState();
  /**
   * 獲得學生請假消息
   *
   * @return
   */
  public String getRequestMessage();
}

3.2學生實現一Student

package com.demo.chain.message;
/**
 * 學生實現類
 *
 * @author
 *
 */
public class Student implements IStudent {
  // 病情的大小狀態
  private int state = -1;
  // 請假消息
  private final String message;
  public Student(int state, String message) {
    this.state = state;
    this.message = message;
  }
  /**
   * 獲得學生請假狀態
   *
   * 0:小事(班長就可以處理)
   *
   * 1:班長處理不了 老師能處理的事
   *
   * 2:老師處理不了 校長能處理的事
   *
   *
   */
  public int getState() {
    return this.state;
  }
  /**
   * 獲得學生請假消息
   *
   * @return
   */
  public String getRequestMessage() {
    return this.message;
  }
}

3.3抽象處理接口一IHandler

package com.demo.chain.handle;
import com.demo.chain.message.IStudent;
/**
 * 抽象處理者接口
 *
 * @author
 *
 */
public interface IHandler {
  // 處理請求
  public void handleRequest(IStudent student);
  // 設置下一個處理者
  public void setHandler(IHandler handler);
}

3.4抽象處理者一AbstractHandler

package com.demo.chain.handle;
import com.demo.chain.message.IStudent;
/**
 * 抽象處理者
 *
 * @author
 *
 */
public abstract class AbstractHandler implements IHandler {
  // 下一個處理者
  private IHandler handler;
  // 請假級別
  private int state = -1;
  // 構造方法 設置級別
  public AbstractHandler(int state) {
    this.state = state;
  }
  // 處理請求 交由子類負責進行具體的處理
  public abstract void process(IStudent student);
  // 處理請求
  public void handleRequest(IStudent student) {
    // 如果學生對象存在
    if (student != null) {
      if (this.state == student.getState()) {
        // 如果請假級別和當前一致 則當前對象進行處理
        this.process(student);
      } else {
        if (this.handler != null) {
          System.out.println("請求上級領導批復!");
          // 如果當前對象處理不了 則交給下一個處理者進行處理
          this.handler.handleRequest(student);
        }
      }
    }
  }
  // 設置下一個處理者
  public void setHandler(IHandler handler) {
    this.handler = handler;
  }
}

3.5班長一SquadLeaderHandler

package com.demo.chain.handle;
import com.demo.chain.message.IStudent;
/**
 * 抽象處理者
 *
 * @author
 *
 */
public abstract class AbstractHandler implements IHandler {
  // 下一個處理者
  private IHandler handler;
  // 請假級別
  private int state = -1;
  // 構造方法 設置級別
  public AbstractHandler(int state) {
    this.state = state;
  }
  // 處理請求 交由子類負責進行具體的處理
  public abstract void process(IStudent student);
  // 處理請求
  public void handleRequest(IStudent student) {
    // 如果學生對象存在
    if (student != null) {
      if (this.state == student.getState()) {
        // 如果請假級別和當前一致 則當前對象進行處理
        this.process(student);
      } else {
        if (this.handler != null) {
          System.out.println("請求上級領導批復!");
          // 如果當前對象處理不了 則交給下一個處理者進行處理
          this.handler.handleRequest(student);
        }
      }
    }
  }
  // 設置下一個處理者
  public void setHandler(IHandler handler) {
    this.handler = handler;
  }
}

3.6老師一TeacherHandler

package com.demo.chain.impl;
import com.demo.chain.handle.AbstractHandler;
import com.demo.chain.message.IStudent;
/**
 * 老師處理者
 *
 * @author
 *
 */
public class TeacherHandler extends AbstractHandler {
  public TeacherHandler() {
    super(1);
  }
  // 子類具體處理請求
  @Override
  public void process(IStudent student) {
    System.out.println("老師 批復:" + student.getRequestMessage());
  }
}

3.7校長一SchoolMasterHandler

package com.demo.chain.impl;
import com.demo.chain.handle.AbstractHandler;
import com.demo.chain.message.IStudent;
/**
 * 校長處理者
 *
 * @author
 *
 */
public class SchoolMasterHandler extends AbstractHandler {
  public SchoolMasterHandler() {
    super(2);
  }
  // 子類具體處理請求
  @Override
  public void process(IStudent student) {
    System.out.println("校長 批復:" + student.getRequestMessage());
  }
}

3.8外觀類一ProcessHandler

package com.demo.chain.process;
import com.demo.chain.handle.IHandler;
import com.demo.chain.impl.SchoolMasterHandler;
import com.demo.chain.impl.SquadLeaderHandler;
import com.demo.chain.impl.TeacherHandler;
import com.demo.chain.message.IStudent;
/**
 * 設置責任鏈關聯
 *
 * @author
 *
 */
public class ProcessHandler {
  // 班長處理者
  private final IHandler sqmshandler;
  // 老師處理者
  private final IHandler techhandler;
  // 校長處理者
  private final IHandler scmshandler;
  // 單例模式
  private static ProcessHandler processHandler = new ProcessHandler();
  /**
   * 構造方法建立請假處理責任鏈
   */
  private ProcessHandler() {
    // 創建處理對象
    // 班長
    this.sqmshandler = new SquadLeaderHandler();
    // 老師
    this.techhandler = new TeacherHandler();
    // 校長
    this.scmshandler = new SchoolMasterHandler();
    /**
     * 建立責任鏈
     */
    // 設置班長的下一個處理者:老師
    this.sqmshandler.setHandler(this.techhandler);
    // 設置老師的下一個處理者:校長
    this.techhandler.setHandler(this.scmshandler);
  }
  /**
   * 獲得單例對象實例
   *
   * @return
   */
  public static ProcessHandler getInstance() {
    return processHandler;
  }
  /**
   * 發送請假請求
   *
   * @param message
   */
  public void sendMessage(IStudent student) {
    // 發送給第一個處理者:班長 處理
    this.sqmshandler.handleRequest(student);
  }
}

3.9客戶端一Client

package com.demo;
import java.util.Random;
import com.demo.chain.message.IStudent;
import com.demo.chain.message.Student;
import com.demo.chain.process.ProcessHandler;
/**
 * 主應用程序
 *
 * @author
 *
 */
public class Client {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // 獲得外觀對象
    ProcessHandler processHandler = ProcessHandler.getInstance();
    // 創建隨機數對象 用來隨機產生學生對象
    Random random = new Random();
    for (int i = 0; i < 3; i++) {
      // 獲得隨機數
      int radom = random.nextInt(3);
      IStudent student = new Student(radom, "學生" + i + "生病了,要請假!");
      System.out.println("#################################");
      // 處理消息
      processHandler.sendMessage(student);
      System.out.println("#################################\n");
    }
  }
}

4 運行結果

#################################
請求上級領導批復!
請求上級領導批復!
校長 批復:學生0生病了,要請假!
#################################
#################################
請求上級領導批復!
請求上級領導批復!
校長 批復:學生1生病了,要請假!
#################################
#################################
班長 批復:學生2生病了,要請假!
#################################

三. 該模式設計原則

1"開-閉"原則

2單一職責原則

四. 使用場合

(1)有多個對象處理同一請求,具體由哪一個來處理還不確定,只有在運行時才確定哪個對象處理的情況。
(2)消息具有多個接收者,而接收對象又是不明確的情況。只需要向其中的一個對象發出消息,由其內部具體處理。
(3)同一消息的多個處理對象可能會動態增加或減少,需要動態地指定的情況。

五. 責任鏈模式靜態類圖

Java如何使用責任鏈模式處理學生請假問題

感謝各位的閱讀!關于“Java如何使用責任鏈模式處理學生請假問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尉犁县| 嘉兴市| 哈尔滨市| 诸城市| 玛多县| 江源县| 肃北| 安溪县| 任丘市| 珠海市| 定兴县| 昭觉县| 通化市| 石狮市| 新乡市| 会同县| 宁乡县| 古蔺县| 双桥区| 大足县| 资兴市| 连城县| 长汀县| 凤凰县| 本溪| 武宁县| 肥东县| 张家川| 定安县| 洪湖市| 枣强县| 隆回县| 招远市| 庆元县| 曲麻莱县| 东辽县| 泸水县| 北海市| 虹口区| 阿瓦提县| 汉寿县|