Java 責任鏈模式

2021-09-10 03:34:53 字數 2813 閱讀 6770

責任鏈模式定義:

將能夠處理同一類請求的物件連成一條鏈,所提交的請求沿鏈傳遞,鏈上的物件逐個判斷是否有能力處理該請求,如果能,則自己處理,如果不能,則傳遞給鏈上的下乙個物件。

責任鏈模式常見的使用場景:

1.接力賽跑

2.公司的公文審批

3.大學裡,獎學金審批流程等。

責任鏈主要的作用:

責任鏈上的處理者,負責處理請求,客戶只要將請求傳送到責任鏈上即可,無須關心處理的細節和請求的傳遞,這樣就將請求的傳送者和請求的處理者解耦了。

責任鏈模式的優點:

1.將請求的傳送者和請求的處理者解耦了。

2.允許動態的新增或減少請求的處理者,而且新增新的請求處理很方便。

責任模式的角色:

1.抽象處理者,它可以是乙個介面或者抽象類,它抽象出處理請求的介面,規範子類處理請求的操作。

下面的案例中,我們以學生申請獎學金,不同的獎學金的數目,由不同的領導(輔導員,系主任,校長)來處理。

/**

* 抽象處理者

* created by administrator

*/public abstract class leader

public void setnextleader(leader leader)

//抽象化處理請求的介面

public abstract void handlerequest(bonusrequest bonusrequest);

}

/**

* 責任上的具體處理者(輔導員)

* created by administrator

*/public class instructor extends leader

@override

public void handlerequest(bonusrequest bonusrequest) else}}

}

/**

* 責任上的具體處理者(系主任)

* created by administrator

*/public class departmenthead extends leader

@override

public void handlerequest(bonusrequest bonusrequest) else}}

}

/**

* 責任上的具體處理者(校長)

* created by administrator

*/public class principal extends leader

@override

public void handlerequest(bonusrequest bonusrequest) elseelse}}

}

/**

* 請求的資訊

* created by administrator

*/public class bonusrequest

public string getstudentname()

public void setstudentname(string studentname)

public int getmonrynumber()

public void setmonrynumber(int monrynumber)

public string getreason()

public void setreason(string reason)

}

客戶端呼叫:(這個案例中,不同的獎學金數目,由不同的領導處理)         

leader instructor =new instructor("張三");

leader departmenthead=new departmenthead("李四");

leader principal=new principal("王五");

//設定責任鏈上,輔導員的下乙個處理物件是系主任

instructor.setnextleader(departmenthead);

//設定責任鏈上,系主任的下乙個處理物件是校長

departmenthead.setnextleader(principal);

bonusrequest bonusrequest=new bonusrequest("趙六",1000,"輔導說我的表現,可以申請獎學金");

instructor.handlerequest(bonusrequest);

結果:

bonusrequest bonusrequest1=new bonusrequest("趙六",5000,"輔導說我的表現,可以申請獎學金");

instructor.handlerequest(bonusrequest1);

結果:

bonusrequest bonusrequest2=new bonusrequest("趙六",10000,"輔導說我的表現,可以申請獎學金");

instructor.handlerequest(bonusrequest2);

結果:

(獎學金數目<=3000 && 獎學金數目》0,輔導員自己處理,獎學金數目<=6000 && 獎學金數目》3000,輔導員轉給系主任處理,獎學金數目<=10000 && 獎學金數目》6000,輔導員轉給系主任,系主任轉給校長處理)

java責任鏈模式

責任鏈模式定義如下 使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關 系。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。package cn.yang.test.controller created by dev yang on 2016 3 1.publ...

Java的責任鏈模式

1.責任鏈模式是一種物件的行為模式。在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。2.結構圖 ...

java設計模式 責任鏈模式

步驟一 建立抽象處理者 handler 角色 這裡是操作與處理分開,介面定義操做方法,抽象類定義處理方法,具體可以寫在一起也行 public inte ce handlerpublic abstract class abstracthandler public void sethandler han...