设计模式(24)-----责任链模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式(24)-----责任链模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
責任鏈模式(chain of responsibility)
定義
責任鏈模式是對象的行為模式。使多個對象都有機會處理請求,從而避免請求的發送者和接受者直接的耦合關系。將這些對象連成一條鏈,沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
UML類圖
角色
抽象處理者(Handler)角色?:定義一個請求的接口。如果需要可以定義個一個方法用來設定和返回下家對象的引用。 具體處理者(ConcreteHandler)角色?:如果可以處理就處理請求,如果不能處理,就把請求傳給下家,讓下家處理。也就是說它處理自己能處理的請求且可以訪問它的下家。例子
有人想請假,小組長只能審批小于等于1天的假期,項目經理可以審批小于等于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("超過了小組長權限,移交上級");this.getHandler().approve(day);}} }ProjectManager(項目經理)
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: ProjectManager.java * @Description: 項目經理,能審批的是小于等于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("項目經理審批");} else {System.out.println("超過了項目經理權限,移交上級");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);} }結果
OK,成功!
總結
優點
調用者不需知道具體誰來處理請求,也不知道鏈的具體結構,降低了節點域節點的耦合度;可在運行時動態修改鏈中的對象職責,增強了給對象指派職責的靈活性。
缺點
沒有明確的接收者,可能傳到鏈的最后,也沒得到正確的處理。
轉載于:https://www.cnblogs.com/a294098789/p/5627861.html
總結
以上是生活随笔為你收集整理的设计模式(24)-----责任链模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 14.04 安装Visua
- 下一篇: java 解析并生成 XML