程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 輕松控制java義務鏈形式

輕松控制java義務鏈形式

編輯:關於JAVA

輕松控制java義務鏈形式。本站提示廣大學習愛好者:(輕松控制java義務鏈形式)文章只能為提供參考,不一定能成為您想要的結果。以下是輕松控制java義務鏈形式正文


界說:義務鏈形式(Chain of Responsibility Pattern)為要求創立了一個吸收者對象的鏈。這類形式賜與要求的類型,對要求的發送者和吸收者停止解耦。這類類型的設計形式屬於行動型形式。在這類形式中,平日每一個吸收者都包括對另外一個吸收者的援用。假如一個對象不克不及處置該要求,那末它會把雷同的要求傳給下一個吸收者,依此類推。

特色:1、下降耦合度。它將要求的發送者和吸收者解耦。

             2、簡化了對象。使得對象不須要曉得鏈的構造。

             3、加強給對象指派職責的靈巧性。經由過程轉變鏈內的成員或許調動它們的順序,許可靜態地新增或許刪除義務。

             4、增長新的要求處置類很便利。

企業級開辟和經常使用框架中的運用:spring,struts的攔阻器,servlet的過濾器

詳細實例:

/**
 *這裡以公司告假舉例:
 *1、或人告假(事宜)
 *2、項目組長審批:小於三天可以審批,年夜於三天請示下級
 *3、部分主管審批:小於十天可以審批,年夜於十天請示下級
 *4、總司理審批 :小於30天可以審批,年夜於30天不同意
 */
public class Demo {

 public static void main(String[] args) {
 Event event = new Event("法式員", 32, "回老家投親");
 Leader a = new GroupLeader("張三");
 Leader b = new Manager("李四");
 Leader c = new GeneralManager("王五");
 
 //指定義務鏈形式
 a.setNextLeader(b);
 b.setNextLeader(c);
 
 a.handler(event);
 }
}

/**
 * 事宜對象,義務鏈中的詳細處置事宜
 * 該實例中即為告假這件事兒
 */
class Event{
 private String name;
 private int days;
 private String reason;
 public Event(String name, int days, String reason) {
 super();
 this.name = name;
 this.days = days;
 this.reason = reason;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public int getDays() {
 return days;
 }
 public void setDays(int days) {
 this.days = days;
 }
 public String getReason() {
 return reason;
 }
 public void setReason(String reason) {
 this.reason = reason;
 }
}

/**
 * 籠統義務鏈對象,前面的一切現實義務鏈對象繼續自該對象 
 */
abstract class Leader{
 private String name;
 protected Leader nextLeader;//義務鏈中的下一個義務對象,這是讓義務鏈連續下去的基本
 public Leader(String name) {
 super();
 this.name = name;
 }
 public void setNextLeader(Leader nextLeader) {
 this.nextLeader = nextLeader;
 }
 
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 protected abstract void handler(Event event);
}

/**
 * 告假流程中的第一個對象,組長
 */
class GroupLeader extends Leader{

 public GroupLeader(String name) {
 super(name);
 }

 protected void handler(Event event) {
 if(event.getDays() < 3){
 System.out.println("--------------------告假條--------------------");
 System.out.print("| 告假人:"+event.getName()+" | ");
 System.out.println("告假天數:"+event.getDays()+"天"+" |");
 System.out.println("| 告假緣由:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(組長),經由過程!");
 System.out.println();
 }else{
 System.out.println(this.getName()+"(主管),沒有權限!");
 this.nextLeader.handler(event);
 }
 }
}

/**
 * 告假流程中的第二個對象,部分主管
 */
class Manager extends Leader{

 public Manager(String name) {
 super(name);
 }

 protected void handler(Event event) {
 if(event.getDays() < 10){
 System.out.println("--------------------告假條--------------------");
 System.out.print("| 告假人:"+event.getName()+" | ");
 System.out.println("告假天數:"+event.getDays()+"天"+" |");
 System.out.println("| 告假緣由:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(主管),告假經由過程!");
 System.out.println();
 }else{
 System.out.println(this.getName()+"(總司理),沒有權限!"); 
 this.nextLeader.handler(event);
 }
 }
}

/**
 * 告假流程中的第三個對象,總司理
 */
class GeneralManager extends Leader{

 public GeneralManager(String name) {
 super(name);
 }

 protected void handler(Event event) {
 if(event.getDays() < 30){
 System.out.println("--------------------告假條--------------------");
 System.out.print("| 告假人:"+event.getName()+" | ");
 System.out.println("告假天數:"+event.getDays()+"天"+" |");
 System.out.println("| 告假緣由:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(總司理)");
 System.out.println();
 }else{
 System.out.println("--------------------告假條--------------------");
 System.out.print("| 告假人:"+event.getName()+" | ");
 System.out.println("告假天數:"+event.getDays()+"天"+" |");
 System.out.println("| 告假緣由:"+event.getReason() + " |");
 System.out.println("審批人:"+this.getName()+"(總司理),告假人欠亨過!");
 System.out.println();
 }
 }
}

義務鏈形式重要用於流程掌握這一類的開辟,比擬較於純真用if-else形式,在代碼修正和整合上有更高的效力,更利於代碼保護。並且,須要增長義務鏈中的對象時,須要在再完成一個詳細的義務鏈類,然後創立義務對象,並保護義務鏈關系就行,不須要更年夜的開支,並且在現實設計中,我們許多時刻義務鏈的保護都在設置裝備擺設文件中停止,如許我們將節儉更多的開辟時光。

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved