设计模式(24)-----责任链模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式(24)-----责任链模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
責(zé)任鏈模式(chain of responsibility)
定義
責(zé)任鏈模式是對象的行為模式。使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接受者直接的耦合關(guān)系。將這些對象連成一條鏈,沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
UML類圖
角色
抽象處理者(Handler)角色?:定義一個請求的接口。如果需要可以定義個一個方法用來設(shè)定和返回下家對象的引用。 具體處理者(ConcreteHandler)角色?:如果可以處理就處理請求,如果不能處理,就把請求傳給下家,讓下家處理。也就是說它處理自己能處理的請求且可以訪問它的下家。例子
有人想請假,小組長只能審批小于等于1天的假期,項目經(jīng)理可以審批小于等于3天的假期,CEO可以審批所有的假期。
Handler
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: Handler.java * @Description: 審批請假抽象類* @author: Han * @date: 2016年6月29日 下午6:05:46 */ public abstract class Handler {protected Handler handler;public Handler getHandler() {return handler;}public void setHandler(Handler handler) {this.handler = handler;}//審批方法public abstract void approve(int day); }GroupLeader(小組長)
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: GroupLeader.java * @Description: 小組長,能審批的是小于等于1天的請假申請 * @author: Han * @date: 2016年6月29日 下午5:58:29 */ public class GroupLeader extends Handler {@Overridepublic void approve(int day) {if(day <= 1) {System.out.println("小組長審批");} else {System.out.println("超過了小組長權(quán)限,移交上級");this.getHandler().approve(day);}} }ProjectManager(項目經(jīng)理)
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: ProjectManager.java * @Description: 項目經(jīng)理,能審批的是小于等于3天的請假* @author: Han * @date: 2016年6月29日 下午6:01:49 */ public class ProjectManager extends Handler {@Overridepublic void approve(int day) {if(day <= 3) {System.out.println("項目經(jīng)理審批");} else {System.out.println("超過了項目經(jīng)理權(quán)限,移交上級");getHandler().approve(day);}} }CEO
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: CEO.java * @Description: 最后移交到CEO審批* @author: Han * @date: 2016年6月29日 下午6:03:59 */ public class CEO extends Handler {@Overridepublic void approve(int day) {System.out.println("CEO審批");} }客戶端
package com.csdhsm.designpattem.chainofresponsibility;public class Solution {public static void main(String[] args) {Handler leader = new GroupLeader();Handler manager = new ProjectManager();Handler ceo = new CEO();//把Handler連成一條鏈 leader.setHandler(manager);manager.setHandler(ceo);//處理請求leader.approve(6);} }結(jié)果
OK,成功!
總結(jié)
優(yōu)點
調(diào)用者不需知道具體誰來處理請求,也不知道鏈的具體結(jié)構(gòu),降低了節(jié)點域節(jié)點的耦合度;可在運行時動態(tài)修改鏈中的對象職責(zé),增強了給對象指派職責(zé)的靈活性。
缺點
沒有明確的接收者,可能傳到鏈的最后,也沒得到正確的處理。
轉(zhuǎn)載于:https://www.cnblogs.com/a294098789/p/5627861.html
總結(jié)
以上是生活随笔為你收集整理的设计模式(24)-----责任链模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 14.04 安装Visua
- 下一篇: asp.net ajax控件工具集 Au